需要添加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. Oracle表空间维护总结

    1. 概念:表空间:最大的逻辑存储文件,与物理上的一个或多个数据文件对应,每个数据库至少拥有一个表空间,表空间的大小等于构成表空间的所有数据文件的大小总和,用于存储用户在数据库中存储的所有内容. 2. ...

  2. BZOJ3127:[USACO2013OPEN]Yin and Yang

    浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...

  3. 微信小程序再次升级:卖货小店小程序不用开发也能进行交易

    卖货小店小程序,不用开发一行代码也能帮商家实现交易功能,这个真是几家欢喜几家愁啊,对于开发小程序商城的公司来说,这个无疑是一个雷霆之际,第一反应就是,这下完了,小程序自身就支持交易,那还要我们这些第三 ...

  4. PHP函数---$_Get()和$_Post()的用法

    一.$_Get()和$_Post()函数是用来传值的,即对应两种提交表单的方法,get和post. 二.$_Get方法 (1)获取通过URL的传值 Example 1 新建两个PHP文件,1.php, ...

  5. MySQL 学习三 关于转义

    DB2 LIKE谓词查询语句中支持 百分号(%).下划线(_)的使用,不支持方括号([])(注:它会把方括号当成实际的值而非通配符),当我们需要在LIKE 查询条件中将百分号(%).下划线(_)作为实 ...

  6. Spring boot 学习八 Springboot的filter

    一:  传统的javaEE增加Filter是在web.xml中配置,如以下代码: <filter> <filter-name>TestFilter</filter-nam ...

  7. GridSplitter用法

    1.GridSplitter的ShowsPreview设置为True时拖动报null错误 解决方法在Grid外面包装一个装饰器:AdornerDecorator,至于为什么这么做,暂时还不知道 2.当 ...

  8. NCBI SRA数据库

    简介 SRA数据库是美国国立卫生研究院(NIH)的高通量测序数据的主要归档,是国际核苷酸序列数据库协作(INSDC)的一部分,其中包括NCBI序列读取存档(SRA),欧洲生物信息学研究所(EBI)和D ...

  9. ES5.X相关API和技巧汇总

    https://blog.csdn.net/laoyang360/article/details/77412668

  10. Flutter汇总贴

    Fluuter常遇到的问题 Flutter从入门到进阶实战携程网App_汇总贴 Flutter教程网 http://www.flutterj.com/ 第三季:https://jspang.com/p ...