2018-06-27 更新了redis新的 方法类 https://www.cnblogs.com/jhy55/p/9232623.html

更新内容:添加连接池,高并发线程错误

实用redis已经有一段时间了,今天刚好有空记录一下所用到的方法,欢迎指正

首先我封装了一些字段信息

    #region 字段
/// <summary>
/// Redis服务器地址
/// </summary>
private static string _host; /// <summary>
/// 端口
/// </summary>
private static int _port; /// <summary>
/// 密码
/// </summary>
private static string _password; /// <summary>
/// 过期时间
/// </summary>
private static DateTime _timeout; #endregion #region 属性
/// <summary>
/// Redis服务器地址
/// </summary>
public static string Host
{
get { return _host = ConfigurationManager.AppSettings["RedisIp"]; }
} /// <summary>
/// 端口
/// </summary>
public static int Port
{
get { return _port = Int32.Parse(ConfigurationManager.AppSettings["RedisPort"]); }
}
/// <summary>
/// 密码
/// </summary>
public static string Password
{
get { return _password = ConfigurationManager.AppSettings["PassWord"]; }
} public static int TimeOutDay = Int32.Parse(ConfigurationManager.AppSettings["DayOut"]); /// <summary>
/// 过期时间
/// </summary>
public static DateTime Timeout
{
get { return _timeout = DateTime.Now.AddDays(TimeOutDay); }
}
#endregion

  

 private static object _locker = new object();

        private static RedisClient redis
{
get
{
RedisClient redis = new RedisClient();
if (!IsLock)
redis = new RedisClient(Host, Port, Password, ChangeDb);
redis.ChangeDb(ChangeDb);
return redis;
}
} /// <summary>
/// 获得Redis对象
/// </summary>
public static RedisClient Redis
{
get { return redis; }
} /// <summary>
/// 设置缓存
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key"></param>
/// <param name="t"></param>
/// <param name="timeOut">过期时间</param>
/// <returns></returns>
public static bool Set<T>(string key, T t)
{
if (IsLock) return false;
lock (_locker)
{
return redis.Set(key, t, Timeout);
}
} /// <summary>
/// 设置缓存
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key"></param>
/// <param name="t"></param>
/// <param name="timeOut">过期时间</param>
/// <returns></returns>
public static bool Set<T>(string key, T t, DateTime time)
{
if (IsLock) return false;
lock (_locker)
{
return redis.Set(key, t, time);
}
}
/// <summary>
/// 获取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T Get<T>(string key)
{
if (IsLock) return default(T);
lock (_locker)
{
if (redis.Exists(key) > 0)
return redis.Get<T>(key);
else
return default(T);
}
} /// <summary>
/// 判断是否存在某个key
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool IsExist(string key)
{
if (IsLock) return false; byte[] buffer = redis.Get(key);
if (buffer.Length > 0)
return true;
else
return false;
} /// <summary>
/// 获取Value的byte的长度
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static int GetValueLength(string key)
{
if (IsLock) return 0; return redis.Get(key).Length;
} /// <summary>
/// 移除指定的Key
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool Remove(string key)
{
if (IsLock) return false; lock (_locker)
{
return redis.Remove(key);
}
} /// <summary>
/// 累加(专用的哦)
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string Append(string sKey, string s)
{
byte[] t = Encoding.Default.GetBytes(s);
t = Encoding.Default.GetBytes(Convert.ToBase64String(t) + "^");
return redis.Append(sKey, t).ToString();
}

  

     /// <summary>
/// 从Redis中读取记录列表
/// </summary>
/// <typeparam name="T">数据结构类型</typeparam>
/// <param name="sKey">关键字</param>
/// <returns></returns>
public static List<T> ReaderEnqueueList<T>(string sKey)
{
var OrderStepLogList = Soholife.Common.RedisUtil.Redis.As<T>();
var fromList = OrderStepLogList.Lists[sKey];
List<T> oList = OrderStepLogList.GetAllItemsFromList(fromList);
if (oList != null)
{
OrderStepLogList.RemoveAllFromList(fromList);
}
return oList;
} /// <summary>
/// 加入具有数据结构的消息队列中
/// </summary>
/// <typeparam name="T">数据结构类型</typeparam>
/// <param name="t">数据对象</param>
/// <param name="sKey">关键字</param>
public static void AddEnqueue<T>(T t, string sKey)
{
var OrderStepLogList = Soholife.Common.RedisUtil.Redis.As<T>();
//加入具有数据结构的消息队列中
OrderStepLogList.EnqueueItemOnList(OrderStepLogList.Lists[sKey], t);
}

  

redis的常用公共方法的更多相关文章

  1. redis的常用公共方法(2)

    之前已经写过一篇redis公共方法的使用(https://www.cnblogs.com/jhy55/p/7681626.html),可是发现在高并发的时候出现 Unknown reply on in ...

  2. iOS常用公共方法

      iOS常用公共方法 字数2917 阅读3070 评论45 喜欢236 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat si ...

  3. iOS 常用公共方法

    iOS常用公共方法 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat size = 0.0; NSError *error; N ...

  4. JS常用公共方法封装

    _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||/ ...

  5. js 常用公共方法

    1.判断是否为空 function isNull(arg1) { return !arg1 && arg1!==0 && typeof arg1!=="boo ...

  6. J2EE项目开发中常用到的公共方法

    在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单.服务器|网络设备重启工单.服务器光纤网线更换工单.网络设备撤线布线工单.服务器|网络设备替换工单.服务器|网络设备RMA工单.通用原 ...

  7. web开发过程中经常用到的一些公共方法及操作

    进化成为程序猿也有段岁月了,所谓的经验,广度还是依旧,只不过是对于某种功能有了多种实现方式的想法.每天依旧不厌其烦的敲打着代码,每一行代码的回车似乎都有一种似曾相识的感觉.于是乎:粘贴复制,再粘贴再复 ...

  8. 4-4 Redis 的常用配置

    2016-12-22 15:30:43 本篇文章属于Redis 系列第四篇文章:Redis 配置文件介绍 该系列文章链接 NoSQL 数据库简介 Redis的安装及及一些杂项基础知识 Redis 的常 ...

  9. Python中高级变量类型(列表,元组,字典,字符串,公共方法...)

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

随机推荐

  1. Windows 系统下安装 dig 命令

    dig是一个Linux下用来DNS查询信息的小工具,dig全称是Domain Information Groper,与nslookup类似,但比nslookup功能更强大.Windows只有nsloo ...

  2. angularjs ng-csv 异步下载

    相信之前我们 前端下载csv的时候 都是通过后台代码 生成文件,然后发送给前台 文件路径来进行下载,下面介绍一下angular1 ng-csv下载 csv数据(这种不通过后台代码来实现的前台下载) 参 ...

  3. 并行执行 Job - 每天5分钟玩转 Docker 容器技术(134)

    有时,我们希望能同时运行多个 Pod,提高 Job 的执行效率.这个可以通过 parallelism 设置. 这里我们将并行的 Pod 数量设置为 2,实践一下: Job 一共启动了两个 Pod,而且 ...

  4. python进阶学习笔记(一)

    python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...

  5. js “top、clientTop、scrollTop、offsetTop…”

    当要做一些与位置相关的插件或效果的时候,像top.clientTop.scrollTop.offsetTop.scrollHeight.clientHeight.offsetParent...看到这么 ...

  6. DLL文件修复

    当你在Windows计算机中安装非操作系统的软件时,往往会覆盖或改写系统共享文件, 如动态链接库(.dll文件)和可执行文件(.exe文件). * 对于Windows系统来说,当用户操作不当(如非正常 ...

  7. Eclipse 安装 SVN 插件的两种方法

    eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse 里Help菜单的“Install New Software”,通过 ...

  8. python实现汉诺塔移动

    汉诺塔问题 汉诺塔是根据一个传说形成的一个问题.汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大 ...

  9. poj Hotel 线段树

    经典线段树的题. 每个节点存储的信息:左端点连续空房间的长度,右端点连续空房间长度,连续空房间的最大长度. 由于要求每次必须从尽量靠左边的位置进行居住,那么搜索时应尽量让区间起始位置更小: 1.如果当 ...

  10. 用pycharm+flask 建立项目以后运行出现ImportError: No module named flask-login问题

    出现此问题,一般情况下: 打开CMD输入: pip install flask-login 然后,在cmd中输入命令: pip list 查看目前已安装的的模板.在此时,如果你继续运行项目,有可能会发 ...