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 ...
随机推荐
- dubbo设计实现的健壮性
Dubbo 作为远程服务暴露.调用和治理的解决方案,是应用运转的经络,其本身实现健壮性的重要程度是不言而喻的. 这里列出一些 Dubbo 用到的原则和方法. 日志 日志是发现问题.查看问题一个最常用的 ...
- Ubuntu环境下对拍
何为对拍 假设我在考场上写了一个能过样例的算法.然后它也能过大样例但是我觉得有些担心某些细节会出错,或者是它连大样例都过不了但是大样例过大无法肉眼差错,这个时候我们就需要对拍了. 所谓对拍,就是对着拍 ...
- css3 实现loading效果
1 圆点渐入渐出 要点: 缩放和透明度的变化,循环变化 <div class="demo1"></div> .demo1{ width: 40px; hei ...
- JavaScript:非输入框禁用退格键
在js文件或<javascript>标签中加入如下代码: /** *非输入框禁用退格键 */ function banBackspace(e) { var ev = e || window ...
- MFC中界面自适应
void CMyDlg::OnSize(UINT nType, int cx, int cy){ CDialogEx::OnSize(nType, cx, cy); CRect rt; GetClie ...
- C#防止sql注入
public class SqlZr { public SqlZr() { // // TODO: 在此处添加构造函数逻辑 / ...
- HDOJ-2153
仙人球的残影 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- PHP注释-----PHPDOC
用过IDE或看过其他源码的小伙伴们应该都见过类似下面这样的注释 /** * 递归获取所有游戏分类 * @param int $id * @return array */ 看得多了就大概知道了一些规 ...
- 使用ffmpeg编码时,如何设置恒定码率,并控制好关键帧I帧间隔
1. 大家在使用ffmpeg进行视频编码时,使用-b命令,想控制比特率,却发现结果并没有如我们设置所愿,通过码流分析器观察视频码流,码率的波动还是很大的,ffmpeg控制的并不好,这时候,我们可以通过 ...
- Windows CreateEvent,SetEvent,WaitForSingleObject的用法
http://blog.pfan.cn/embed/19089.html WaitForSingleObject的用法 DWORD WaitForSingleObject( HANDLE hHan ...