using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using StackExchange.Redis; namespace Common.Util
{
public class RedisUtil
{
#region init
private static object lockForRedis = new object();//连接实例锁
private static ConnectionMultiplexer Instance; //连接实例
/// <summary>
/// 默认开始就给连接
/// </summary>
static RedisUtil()
{
GetConn(); //--初始就实例化
}
/// <summary>
/// 获取连接
/// </summary>
/// <returns></returns>
private static ConnectionMultiplexer GetConn()
{
if (Instance == null)
{
lock (lockForRedis)
{
if (Instance == null || !Instance.IsConnected)
{
Instance = ConnectionMultiplexer.Connect(GetConfig()); }
}
}
return Instance;
}
/// <summary>
/// 获取配置
/// </summary>
/// <returns></returns>
private static ConfigurationOptions GetConfig()
{
ConfigurationOptions options = new ConfigurationOptions(); options.EndPoints.Add("localhost",6379);
options.ConnectTimeout = 6000; //超时时间设置(默认5000)
options.ConnectRetry = 1; //连接重试周期
return options;
}
#endregion
#region String
/// <summary>
/// 设置String值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="timeSpan"></param>
/// <param name="dbIndex"></param>
/// <returns></returns>
public static bool StringSet<T>(string key,T value,TimeSpan? timeSpan=null,int dbIndex=0)
{
try
{
var db = GetConn().GetDatabase(dbIndex);
return db.StringSet(key, JsonConvert.SerializeObject(value),timeSpan);
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
} }
/// <summary>
/// 获取String值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="dbIndex"></param>
/// <returns></returns>
public static T StringGet<T>(string key,int dbIndex=0)
{
try
{
var db = GetConn().GetDatabase(dbIndex);
return JsonConvert.DeserializeObject<T>(db.StringGet(key));
}
catch(Exception ex)
{
Console.WriteLine(ex);
return default(T);
} }
/// <summary>
/// 存入递增类型的键值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="dbIndex"></param>
/// <returns></returns>
public static double StringIncrement(string key, double value, int dbIndex = 0)
{
try
{
var db = GetConn().GetDatabase(dbIndex);
return db.StringIncrement(key,value);
}
catch (Exception ex)
{ return 0;
}
}
/// <summary>
/// 存入递减类型的键值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="dbIndex"></param>
/// <returns></returns>
public static double StringDecrement(string key,double value,int dbIndex = 0)
{
try
{
var db = GetConn().GetDatabase(dbIndex);
return db.StringDecrement(key, value);
}
catch (Exception ex)
{ return 0;
}
}
#endregion
}
}

  

最新文章

  1. 匈牙利算法 DFS模板(了解度+1)
  2. 教你如何反编译Android安装文件apk来偷窥源代码
  3. dtd语法之定义属性
  4. design the relations
  5. ffmpeg显示视频
  6. Java中x+=y和x=x+y两种实现的区别
  7. asp.net关于Repeater控件中的全选,批量操作
  8. Android应用中使用百度地图API定位自己的位置(二)
  9. [CSS3] 学习笔记-CSS动画特效
  10. 一口一口吃掉Hibernate(五)——一对多单向关联映射
  11. 【原创】大叔问题定位分享(5)Kafka客户端报错SocketException: Too many open files 打开的文件过多
  12. java 实现文件上传下载以及查看
  13. Python爬取淘宝店铺和评论
  14. Linux常用命令全称
  15. C#之WinForm设置控件居中
  16. #Plugin 中国省市选择插件
  17. InstallShield 制作MSI
  18. Python3 matplotlib的绘图函数subplot()简介
  19. Linux文本编辑器-vi/vim
  20. 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)

热门文章

  1. jquery树形菜单插件treeView
  2. Python- 贪婪与非贪婪
  3. python再议装饰器
  4. 基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc
  5. 如何在node.js中使用neo4j
  6. 【二叉树的递归】04找出二叉树中路径和等于给定值的所有路径【Path Sum II】
  7. [原]NYOJ-字符串替换-113
  8. ACM学习历程—HDU 5012 Dice(ACM西安网赛)(bfs)
  9. understanding of Pipe line &amp; Timing Logic
  10. mongodb 的命令操作(转)