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. git服务器配置http请求

    使用apache 配置http协议的git库 在CentOS上基于Apache http服务搭建git远程仓库(一) 基于http方式的git服务器搭建 搭建http协议的git服务器 Linux g ...

  2. Phone文件备份

    一 把照片导入到本地 连接手机和PC,插上数据线后PC上会自动检测并弹出对话框,提示导入 可以指定导入的目录.确定之后点击导入即可开始执行导入操作. 二 把语音备忘录导入到本地 需要借助iTunes联 ...

  3. Linux下的压力测试工具:ab、http_load、webbench、siege

    一.ab 1.1 介绍 ab是apache自带的一款功能强大的测试工具.      安装了apache一般就自带了. 1.2 下载 同apache. 1.3 安装 同apache. 1.4 安装结果 ...

  4. Java经典编程题50道之四十

    将几个字符串排序(按英文字母的顺序). public class Example40 {    public static void main(String[] args) {        Stri ...

  5. mysql2 - 基础

    一.SQL 练习 在java1701下,创建Stuednt 表,并插入以下数据: 增加创建时间字段,如下: 更改所有时间为当前时间: 二.数据库基础知识 1. 关系模型 1.1 表 table.列 c ...

  6. hdu 1878 无向图的欧拉回路

    原题链接 hdu1878 大致题意: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个无向图,问是否存在欧拉回路? 思路: 无向图存在欧拉回路的条件:1.图是连 ...

  7. UVA - 10118 Free Candies 记忆化搜索经典

    思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...

  8. 动态添加数据源,根据用户登录切换数据库.编程式Spring事务.

    根据用户注册,系统自动创建私有数据库,用户登录,动态添加数据源到Spring数据路由,Session超时删除数据源 好处:当数据量大的时候,类似水平切割效果,效率会高一些 坏处:数据源切换,Sprin ...

  9. python小练习之读取文件写入excel

    文件是个json文件 内容为: 导入excel后的格式为 屡一下思路 一步步怎么实现: 1 首先需要读取json文件 然后将读取的内容转为字典 2 将excel的列名写入一个list中 然后遍历执行写 ...

  10. Keras学习笔记

    Keras基于Tensorflow和Theano.作为一个更高级的框架,用其编写网络更加方便.具体流程为根据设想的网络结构,使用函数式模型API逐层构建网络即可,每一层的结构都是一个函数,上一层的输出 ...