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 } }