RedisUtil(未完,持续更新中....)
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
}
}
RedisUtil(未完,持续更新中....)的更多相关文章
- (阿里巴巴)数据库连接池——Druid (未完持续更新)
Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...
- 【前端面试】Vue面试题总结(持续更新中)
Vue面试题总结(持续更新中) 题目参考链接 https://blog.csdn.net/weixin_45257157/article/details/106215158 由于已经有很多前辈深造VU ...
- java视频教程 Java自学视频整理(持续更新中...)
视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...
- 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)
Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...
- 中国.NET:各地微软技术俱乐部汇总(持续更新中...)
中国.NET:各地微软技术俱乐部汇总(持续更新中...) 本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by 史记微软. ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中
写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...
- 史上最全的spark面试题——持续更新中
史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题 版权声明:本文为博主原创文章,遵循C ...
- 前端面试题总结——HTML(持续更新中)
前端面试题总结--HTML(持续更新中) 1.什么是HTML? HTML:HyperText Markup Language超文本标记语言 2.XHTML和HTML有什么区别 HTML是一种基本的WE ...
- 2020年腾讯实习生C++面试题&持续更新中(1)
2020年腾讯实习生C++面试题&持续更新中(1) 腾讯面试整理(1) 最近大三的学生找实习生的同学非常多,给大家分享一篇腾讯实习生的面试题,关于面试题,会持续更新~~~ 也算是今天开通博客的 ...
随机推荐
- 启动Hive时报错
报错信息如下 Logging initialized -bin/lib/hive-common-.jar!/hive-log4j.properties Exception in thread &quo ...
- java中properties
一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...
- vue2.0 构建单页应用最佳实战
vue2.0 构建单页应用最佳实战 前言 我们将会选择使用一些 vue 周边的库vue-cli, vue-router,vue-resource,vuex 1.使用 vue-cli 创建项目2.使 ...
- Struts 2简单实例
Struts 2简单实例 参考: [java开发系列]—— struts2简单入门示例 - xingoo - 博客园https://www.cnblogs.com/xing901022/p/39616 ...
- Delphi操作XML - 冰雪傲骨
Delphi操作XMl,只要使用 NativeXml.我是用的版本是4..NativeXML的使用方法比较简单,但是功能很强大. XE2的话,要在simdesign.inc后面加上: // Delph ...
- Visual C++中min()和max()函数的使用
标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max().通常用它可以计算某个值对的最小值和最大值. 可惜在 Visual C++ 无法使用它们, ...
- Quality
- pyglet--EventLoop对象(主事件循环,用于从系统消息队列中取出消息,并派发给各个窗口)
一.识别系统消息,并派出该消息 EventLoop(应用程序的事件循环),用于循环的从系统消息队列中获取系统消息(包含消息的各种参数:如鼠标位置,事件类型,鼠标左右键,哪个键盘键等),然后派发相应的事 ...
- YNOI2016 这是我自己的发明
看到这个标题立刻想到:. “绝地科学家,八倍不屏息啊,八百里外把头打啊...” 首先我们发现如果只考虑第二个操作,这棵树就是假的,我们可以直接莫队解决 如果考虑换根的话...可以把一个操作换成小于等于 ...
- BZOJ1012:[JSOI2008]最大数
浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id ...