public static classRedisHelper
{public static readonlyConnectionMultiplexer _connectin;///
///数据库id///
public static int DbNum { get; set; }///
///连接方式///
public static string ConnectionString { get; set; }staticRedisHelper()
{
DbNum= -1;
ConnectionString= null;
_connectin= string.IsNullOrEmpty(ConnectionString) ?RedisConnectionHelper.Instance :
RedisConnectionHelper.GetConnectionMultiplexer(ConnectionString);
}///
///获取db///
public staticIDatabase Db
{get{return_connectin.GetDatabase(DbNum);
}
}///
///执行委托///
///
///
///
public static T Do(Funcfunc)
{returnfunc(Db);
}#region string
///
///保存string///
///
///
///
public static bool StringSet(string key, string value, TimeSpan? expiry = null)
{return Do(d =>d.StringSet(key, value,expiry));
}///
///异步保存///
///
///
///
///
public static async Task StringSetAsync(string key, string value, TimeSpan? expiry = null)
{return await Do(d =>d.StringSetAsync(key, value, expiry));
}///
///获取值///
///
///
public static string StringGet(stringkey)
{return Do(d =>d.StringGet(key));
}///
///获取值///
///
///
public static async Task StringGetAsync(stringkey)
{return await Do(d =>d.StringGetAsync(key));
}///
///删除键///
///
public static bool KeyDelete(stringkey)
{return Do(d =>d.KeyDelete(key));
}///
///删除键///
///
public static async Task KeyDeleteAsync(stringkey)
{return await Do(d =>d.KeyDeleteAsync(key));
}///
///set///
///
///
///
///
///
public static bool StringSet(string key, T value, TimeSpan? expiry = null)
{string json =Serialize(value);return Do(d =>d.StringSet(key, json, expiry));
}///
///set///
///
///
///
///
///
public static async Task StringSetAsync(string key, T value, TimeSpan? expiry = null)
{string json =Serialize(value);return await Do(d =>d.StringSetAsync(key, json, expiry));
}///
///get///
///
///
///
///
///
public static T StringGet(stringkey)
{string json = Do(d =>d.StringGet(key)).ToString();return Deserialize(json);
}///
///get///
///
///
///
///
///
public static async Task StringGetAsync(stringkey)
{string json = await Do(d =>d.StringGetAsync(key));return Deserialize(json);
}#endregion
///
///序列化///
///
///
///
private static string Serialize(T value)
{var result = value is string ?value.ToString() : JsonConvert.SerializeObject(value,newJsonSerializerSettings
{
DateFormatString= "yyyy-MM-dd hh:mm:ss"});returnresult;
}///
///解析///
///
///
///
private static T Deserialize(stringjson)
{if (string.IsNullOrEmpty(json)) return default;return JsonConvert.DeserializeObject(json);
}///
///解析redis缓存的集合///
///
///
///
private static List DeserializeList(RedisValue[] values)
{return values.Select(s => Deserialize(s)).ToList();
}#region List
///
///保存list 集合///
///
///
///
public static void SetList(string key, Listvalue)
{if (value.Count > 0)
{var values = value.Select(s =>(RedisValue)Serialize(s)).ToArray();
Do(d=>d.ListRightPush(key, values));
}
}///
///保存list 集合///
///
///
///
public static async Task SetListAsync(string key, Listvalue)
{if (value.Count > 0)
{var values = value.Select(s =>(RedisValue)Serialize(s)).ToArray();await Do(d =>d.ListRightPushAsync(key, values));
}
}///
///获取list 集合///
///
///
///
public static List GetList(stringkey)
{var values = Do(d =>d.ListRange(key));if(values.IsNullOrEmpty())
{return values.Select(s => Deserialize(s)).ToList();
}return default;
}///
///获取list 集合///
///
///
///
public static async Task> GetListAsync(stringkey)
{var values = await Do(d =>d.ListRangeAsync(key));if(values.IsNullOrEmpty())
{return values.Select(s => Deserialize(s)).ToList();
}return default;
}///
///删除并返回集合的第一个元素///ListLeftPop///
///
public static T RemoveFirst(stringkey)
{var json = Do(d =>d.ListLeftPop(key));return Deserialize(json);
}///
///删除并返回集合的第一个元素///ListLeftPop///
///
public static async Task RemoveFirstAsync(stringkey)
{var json = await Do(d =>d.ListLeftPopAsync(key));return Deserialize(json);
}///
///删除并返回集合的最后一个元素///
///
///
///
public static T RemoveLast(stringkey)
{return Deserialize(Do(d =>d.ListRightPop(key)));
}///
///删除并返回集合的最后一个元素///
///
///
///
public static async Task RemoveLastAsync(stringkey)
{return Deserialize(await Do(d =>d.ListRightPopAsync(key)));
}///
///根据索引获取集合 (默认所有)///
///
///
///
///
///
public static List ListRange(string key, long start = 0, long stop = -1)
{var json = Do(d =>d.ListRange(key, start, stop));return DeserializeList(json);
}///
///根据索引获取集合 (默认所有)///
///
///
///
///
///
public static async Task> ListRangeAsync(string key, long start = 0, long stop = -1)
{var json = await Do(d =>d.ListRangeAsync(key, start, stop));return DeserializeList(json);
}///
///根据元素删除///
///
///
///
/// 返回删除元素数量
public static int RemoveAt(stringkey,T value)
{return (int)Do(d =>d.ListRemove(key, Serialize(value)));
}///
///根据元素删除///
///
///
///
/// 返回删除元素数量
public static async Task RemoveAtAsync(stringkey, T value)
{return (int)await Do(d =>d.ListRemoveAsync(key, Serialize(value)));
}///
///向集合开头添加一个元素///
///
///
///
public static void AddFirst(stringkey, T value)
{
Do(d=>d.ListLeftPush(key, Serialize(value)));
}///
///向集合开头添加一个元素///
///
///
///
public static async Task AddFirstAsync(stringkey, T value)
{await Do(d =>d.ListLeftPushAsync(key, Serialize(value)));
}///
///向集合末尾添加一个元素///
///
///
///
public static void AddLast(stringkey, T value)
{
Do(d=>d.ListRightPush(key, Serialize(value)));
}///
///向集合末尾添加一个元素///
///
///
///
public static async Task AddLastAsync(stringkey, T value)
{await Do(d =>d.ListRightPushAsync(key, Serialize(value)));
}///
///判断对象是否存在///
///
///
///
///
public static bool Contains(stringkey, T value)
{//数量
var length =Count(key);//格式话对象
var json =Serialize(value);for (int i = 0; i < length; i++)
{if (Do(d =>d.ListGetByIndex(key, i).ToString().Equals(json)))
{return true;
}
}return false;
}///
///判断对象是否存在///
///
///
///
///
public static async Task ContainsAsync(stringkey, T value)
{//数量
var length = awaitCountAsync(key);//格式话对象
var json =Serialize(value);for (int i = 0; i < length; i++)
{var item = await Do(d =>d.ListGetByIndexAsync(key, i));if(item.ToString().Equals(json))
{return true;
}
}return false;
}///
///根据索引获取对象///ListGetByIndex///
///
///
///
///
public static T Get(string key, intindex)
{string json = Do(d =>d.ListGetByIndex(key, index));return Deserialize(json);
}///
///根据索引获取对象///ListGetByIndex///
///
///
///
///
public static async Task GetAsync(string key, intindex)
{string json = await Do(d =>d.ListGetByIndexAsync(key, index));return Deserialize(json);
}///
///根据对象获取索引///
///
///
///
///
public static int IndexOf(stringkey, T value)
{//数量
var length =Count(key);//格式话对象
var json =Serialize(value);for (int i = 0; i < length; i++)
{if ( Do(d =>d.ListGetByIndex(key, i).ToString().Equals(json)))
{returni;
}
}return -1;
}///
///根据对象获取索引///
///
///
///
///
public static async Task IndexOfAsync(stringkey, T value)
{//数量
var length = awaitCountAsync(key);//格式话对象
var json =Serialize(value);for (int i = 0; i < length; i++)
{var item = await Do(d =>d.ListGetByIndexAsync(key, i));if( item.ToString().Equals(json))
{returni;
}
}return -1;
}///
///获取list的数量///
///
///
public static int Count(stringkey)
{return (int)Do(d =>d.ListLength(key));
}///
///获取list的数量///
///
///
public static async Task CountAsync(stringkey)
{return (int)await Do(d =>d.ListLengthAsync(key));
}#endregion}