需要添加StackExchange.Redis.dll引用

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
using Newtonsoft.Json;
using StackExchange.Redis;
using System.Configuration; namespace PKTDataService
{
class RedisHelper
{
ILog log = log4net.LogManager.GetLogger("RedisHelper");
public ConnectionMultiplexer connection_ = null;
private string redis_host = "127.0.0.1:6379";
private int SORTTIMEOUT = 7;
public RedisHelper()
{
int.TryParse( ConfigurationManager.AppSettings["DBSERVER"],out SORTTIMEOUT);
}
public RedisHelper(string host)
{
redis_host = host;
}
public bool connectRedis()
{
if (connection_ == null || !connection_.IsConnected)
{
try
{
var options = ConfigurationOptions.Parse(redis_host);
options.AllowAdmin = true;
connection_ = ConnectionMultiplexer.Connect(options); }
catch (StackExchange.Redis.RedisConnectionException ex)
{
log.Error(ex.Message);
}
catch (Exception ex)
{
log.Error(ex.Message);
}
}
return connection_ != null && connection_.IsConnected;
} public void CloseRedis()
{
if (connection_ != null || connection_.IsConnected)
{
try
{
connection_.CloseAsync();
connection_.Dispose(); }
catch (StackExchange.Redis.RedisConnectionException ex)
{
log.Error(ex.Message);
}
catch (Exception ex)
{
log.Error(ex.Message);
}
} } public int multi_set_key(Dictionary<string, object> items , int timeout = 0)
{
int count = 0;
if (connectRedis())
{
int v = 0;
IDatabase db = connection_.GetDatabase();
var trans = db.CreateTransaction();
foreach (string key in items.Keys)
{
string val = "";
object obj = new object();
if(items.TryGetValue(key, out obj))
{
val = obj.ToString();
}
if (!db.KeyExists(key))
{
trans.StringSetAsync(key, val);
trans.KeyExpireAsync(key, new TimeSpan(SORTTIMEOUT, 0, 0));//设置过期时间为3天
//if(timeout > 0)
//{
// trans.KeyExpireAsync(key, new TimeSpan(0 , 0 , timeout));
//}
count++;
}
}
trans.Execute();
}
return count;
}
public bool slide_key_int(string key , int param)
{
if (connectRedis())
{
int v = 0;
IDatabase db = connection_.GetDatabase();
ITransaction trans = db.CreateTransaction();
RedisValue val = db.StringGet(key);
if (val.HasValue)
{
Int32.TryParse(val.ToString(), out v);
}
v += param;
db.StringSet(key, string.Format("{0}", v));
log.Debug("更新redis值: " + key + " " + val);
return trans.Execute();
}
return false;
}
/// <summary>
/// 删除并返回存储在键上的列表的最后一个元素。
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string rpopQueue(string key)
{
if (connectRedis())
{
IDatabase db = connection_.GetDatabase(); if (db.KeyExists(key))
{
RedisValue val = db.ListRightPop(key);
if (val.HasValue)
{
log.Debug("删除的"+key + "的值為: " + val);
return val.ToString();
}
}
else
{
// log.Debug("rpopQueue方法" + key + "不存在");
}
}
return null;
}
public int lpushQueue(string key , string value)
{
int result = 0;
if (connectRedis())
{
IDatabase db = connection_.GetDatabase();
RedisValue val = db.ListLeftPush(key, value);
if (val.IsInteger)
{
val.TryParse(out result);
} }
return result;
} public bool lpushQueue2(string key, string value)
{
int result = 0;
if (connectRedis())
{
IDatabase db = connection_.GetDatabase();
if (db.KeyExists(key))
{
RedisValue val = db.ListLeftPush(key, value);
if (val.IsInteger)
{
val.TryParse(out result);
}
return true;
}
else
{
RedisValue val = db.ListLeftPush(key, value);
return true;
//log.Warn("lpushQueue方法" + key + "不存在");
}
}
return false;
} public string rpoplpushQueue(string key)
{
if (connectRedis())
{
string push_key = string.Format("{0}_BACKUP", key);
IDatabase db = connection_.GetDatabase();
if (db.KeyExists(key))
{
RedisValue val = db.ListRightPopLeftPush(key, push_key);
if (val.HasValue)
{
return val.ToString();
}
}
else
{ // log.Debug("rpoplpushQueue方法" + key + "不存在");
}
}
return null;
}
public string get_key(string key)
{
if (connectRedis())
{
IDatabase db = connection_.GetDatabase();
if (db.KeyExists(key))
{
RedisValue val = db.StringGet(key);
if (val.HasValue)
{
return val.ToString();
}
}
}
return "";
}
public string delete_key(string key)
{
if (connectRedis())
{
IDatabase db = connection_.GetDatabase();
if (db.KeyExists(key))
{
db.KeyDelete(key);
}
}
return "";
}
public bool set_key(string key , string val)
{
if (connectRedis())
{
IDatabase db = connection_.GetDatabase(); return db.StringSet(key , val);
}
return false;
}
public bool KeyExpire(string key, string val, TimeSpan timeout)
{
if (connectRedis())
{
IDatabase db = connection_.GetDatabase();
return db.StringSet(key, val, timeout); }
return false;
}
public bool KeyExsit(string key)
{
if (connectRedis())
{
IDatabase db=connection_.GetDatabase();
return db.KeyExists(key);
}
return false;
} public string count_queue(string key)
{
if (connectRedis())
{
IDatabase db = connection_.GetDatabase();
RedisValue val = db.ListLength(key);
if (val.IsInteger)
{
return val.ToString();
}
}
return null;
} /// <summary>
/// 清空redis
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool FlushDatabase()
{
int num = 0;
bool result = false;
while (true)
{
try
{
if (connectRedis())
{
connection_.GetServer(redis_host).FlushDatabase();
result = true;
break;
}
if (num > 10)
{
result = false;
break;
}
}
catch (Exception ex)
{
num++;
log.Debug(ex.Message);
}
}
return result; }
}
}

c# Redis操作类的更多相关文章

  1. php的redis 操作类,适用于单台或多台、多组redis服务器操作

    redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...

  2. 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

    1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个 ...

  3. 封装一个redis操作类来操作hash格式

    最近项目要用redis,依然是基于tp3.2. 发现thinkphp3.2自带的缓存类并不好使用,就自己封装了一个 目前只支持hash格式,其他数据类型的操作后面用到的时候再补充 <?php / ...

  4. spring 的redis操作类RedisTemplate

    spring 集成的redis操作几乎都在RedisTemplate内了. 已spring boot为例, 再properties属性文件内配置好 redis的参数 spring.redis.host ...

  5. Java的redis 操作类-优化通用版本

    java操作redis多节点处理方式;http://blog.itpub.net/29254281/viewspace-1188644/首先maven引入依赖包 <dependency> ...

  6. 用C#封装的ServiceStack.redis操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. <记录> PHP Redis操作类

    namespace common\controller; class Redis { public $redisObj = null; //redis实例化时静态变量 static protected ...

  8. 实用Redis操作类

    <?php /** * ------------------------------------------ * 统一redis的配置与数据存储规范,便于扩展与修改 * # redis通常用于热 ...

  9. PHP redis操作类 个人总结

    <pre name="code" class="php"><span style="font-size:18px;"> ...

  10. 一个简单清晰的Redis操作类

    <?php /** * redis处理的二次封装 * */ class Redis{ private $_redis; private $_config; public function __c ...

随机推荐

  1. HDU3991:Black and White

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php? ...

  2. Python创建删除文件

    Python代码如下: import os directory = "E:\\学习日志\\" os.chdir(directory) # 改变当前工作目录 cwd = os.get ...

  3. request.getSession()方法的应用

    request.getSession(true):若存在会话则返回该会话,否则新建一个会话. request.getSession(false):若存在会话则返回该会话,否则返回NULL

  4. mina2中的线程池

    一.Mina中的线程池模型 前面介绍了Mina总体的层次结构,那么在Mina里面是怎么使用Java NIO和进行线程调度的呢?这是提高IO处理性能的关键所在.Mina的线程调度原理主要如下图所示: A ...

  5. IoT:template

    ylbtech-IoT: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech.cnb ...

  6. Python list的定义和删改

    需要用到list.取回参数 .  sys.argv返回的是个元组. 最后发现用for循环好像没用. a=0 for i in sys.argv[1:]: qh[a]=sys.argv[a] a=a+1 ...

  7. SSH 整合时报内存溢出 缓存无法释放

    简单点讲, 我的问题就是jar包一样, 但版本不一样, 还有重复的jar导入了, 导致了这个问题, 别人的我不知道, 问题知道了, 答案也就有了, 是重复加载的问题, 删掉重复的就好了.

  8. Linux系统下使用split命令分割大文件 (转载)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://snailwarrior.blog.51cto.com/680306/140531 ...

  9. Python:关于subprocess.stdout.read()导致程序死锁的问题

    subprocess.stdout.read()导致程序死锁的问题解决 今天有位老哥联系我说,在我的python之路系列中,解决粘包问题那一章的代码有BUG 这里当运行命令过于庞大的时候,会导致程序直 ...

  10. Solr 6.7学习笔记(04)-- Suggest

    当我们使用baidu或者Google时,你输入很少的字符,就会自动跳出来一些建议选项,在Solr里,我们称之为Suggest,在solrconfig.xml里做一些简单的配置,即可实现这一功能.配置如 ...