c# Redis操作类
需要添加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操作类的更多相关文章
- php的redis 操作类,适用于单台或多台、多组redis服务器操作
redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...
- 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类
1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个 ...
- 封装一个redis操作类来操作hash格式
最近项目要用redis,依然是基于tp3.2. 发现thinkphp3.2自带的缓存类并不好使用,就自己封装了一个 目前只支持hash格式,其他数据类型的操作后面用到的时候再补充 <?php / ...
- spring 的redis操作类RedisTemplate
spring 集成的redis操作几乎都在RedisTemplate内了. 已spring boot为例, 再properties属性文件内配置好 redis的参数 spring.redis.host ...
- Java的redis 操作类-优化通用版本
java操作redis多节点处理方式;http://blog.itpub.net/29254281/viewspace-1188644/首先maven引入依赖包 <dependency> ...
- 用C#封装的ServiceStack.redis操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- <记录> PHP Redis操作类
namespace common\controller; class Redis { public $redisObj = null; //redis实例化时静态变量 static protected ...
- 实用Redis操作类
<?php /** * ------------------------------------------ * 统一redis的配置与数据存储规范,便于扩展与修改 * # redis通常用于热 ...
- PHP redis操作类 个人总结
<pre name="code" class="php"><span style="font-size:18px;"> ...
- 一个简单清晰的Redis操作类
<?php /** * redis处理的二次封装 * */ class Redis{ private $_redis; private $_config; public function __c ...
随机推荐
- unbuntu下安装qq
由于Wine QQ一直没更新版本导致目前版本报版本过低无法使用,暂时先上UK官网的国际版Wine QQ,虽然功能没那么新,但稳定能用: 下载: 下载地址:http://www.ubuntukylin. ...
- 「P4996」「洛谷11月月赛」 咕咕咕(数论
题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...
- jdk、tomcat如何配置环境变量
一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...
- 解决Response输出时乱码
Response ServletResponse – 通用的response提供了一个响应应该具有的最基本的属性和方法 | |- HttpServletResponse – 在ServletRespo ...
- IOS要用到的零碎东西
有些东西虽然不重要,但是零零碎碎会用到,就做个笔录吧: 协议中有2个关键字可以控制方法是否要实现(默认是@required),在大多数情况下, 用途在于程序员之间的交流 @required:这个方法必 ...
- 02_mysql卸载和安装
如果只是随便地反安装/uninstall之后,在文件系统或者是注册表里面可能会残留一些东西,这些东西如果不及时清除掉,再装可能会出现问题,你新装的会用不了. #Path to installation ...
- Gym 101142C CodeCoder vs TopForces (搜索)
题意:每个人有2种排名,对于A只要有一种排名高于B,那么A就能赢B,再如果B能赢C,那么A也能赢C,要求输出每个人分别能赢多少个人 析:首先把题意先读对了,然后我们可以建立一个图,先按第一种排名排序, ...
- C++ 定位构造
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yiluohuanghun.blog.51cto.com/3407300/1258 ...
- C/C++ Sleep(0)
Sleep(0) 的意义是放弃当前线程执行的时间片,把自身放到等待队列之中.这时其它的线程就会得到时间片进行程序的程序.Sleep(0)能够降低当前线程的执行速 度,比如:现在系统中有100个线程(先 ...
- SCUT - 12 - 西方国家 - 矩阵快速幂
https://scut.online/p/12 可以用矩阵快速幂来做. #include<bits/stdc++.h> using namespace std; typedef long ...