public class RedisCacheHelper
{
默认缓存过期时间单位秒
public static int secondsTimeOut = 30 * 60;
// 数据库
public static long InitialDb;
// 地址
public static string Url;
private static PooledRedisClientManager _instance = null;
private static object _locker = new Object();
/// <summary>
/// Redis连接池管理
/// </summary>
public static PooledRedisClientManager Instance
{
get
{
if (_instance == null)
{
lock (_locker)
{
if (_instance == null)
{
InitialDb = 8;
Url = "127.0.0.1";
_instance = new PooledRedisClientManager(InitialDb, new string[] { Url });
}
}
}
return _instance;
}
}
static RedisCacheHelper()
{
}
/// <summary>
/// 连接Redis
/// </summary>
/// <returns></returns>
public static RedisClient GetClient()
{
return (RedisClient)Instance.GetClient();
}
#region Key/Value读取和存储
/// <summary>
/// 添加新缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="t"></param>
/// <param name="timeout"></param>
/// <returns></returns>
public static bool Add<T>(string key, T t, int timeout)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
return redisClient.Add<T>(key, t, DateTime.Now.AddHours(secondsTimeOut));
}
}
/// <summary>
/// 添加新缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="t"></param>
/// <param name="timeSpan"></param>
/// <returns></returns>
public static bool Add<T>(string key, T t, TimeSpan timeSpan)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.Add<T>(key, t, timeSpan);
}
}
/// <summary>
/// 设置缓存 用于修改
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">缓存建</param>
/// <param name="t">缓存值</param>
/// <param name="timeout">过期时间,单位秒,-1:不过期,0:默认过期时间</param>
/// <returns></returns>
public static bool Set<T>(string key, T t, int timeout = 0)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
return redisClient.Set<T>(key, t, DateTime.Now.AddHours(secondsTimeOut));
}
}
/// <summary>
/// 设置缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="t"></param>
/// <param name="timeSpan"></param>
/// <returns></returns>
public static bool Set<T>(string key, T t, TimeSpan timeSpan)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.Set<T>(key, t, timeSpan);
}
}
/// <summary>
/// 获取
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T Get<T>(string key)
{
if (!string.IsNullOrWhiteSpace(key))
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.Get<T>(key);
}
}
return default(T);
}
#endregion
#region 链表操作
/// <summary>
/// 获取链表数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <returns></returns>
public static IEnumerable<T> GetList<T>(string listId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
IRedisTypedClient<T> iredisClient = redisClient.As<T>();
return iredisClient.Lists[listId];
}
}
/// <summary>
/// IEnumerable数据添加到链表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="values"></param>
/// <param name="timeout"></param>
public static void AddList<T>(string listId, IEnumerable<T> values, int timeout = 0)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
redisClient.Expire(listId, 60);
IRedisTypedClient<T> iredisClient = redisClient.As<T>();
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
redisClient.Expire(listId, secondsTimeOut);
}
var redisList = iredisClient.Lists[listId];
redisList.AddRange(values);
iredisClient.Save();
}
}
/// <summary>
/// 添加单个实体到链表中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="item"></param>
/// <param name="timeout"></param>
public static void AddEntityToList<T>(string listId, T item, int timeout = 0)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
IRedisTypedClient<T> iredisClient = redisClient.As<T>();
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
redisClient.Expire(listId, secondsTimeOut);
}
var redisList = iredisClient.Lists[listId];
redisList.Add(item);
iredisClient.Save();
}
}
/// <summary>
/// 在链表中删除单个实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="t"></param>
public static void RemoveEntityFromList<T>(string listId, T t)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
IRedisTypedClient<T> iredisClient = redisClient.As<T>();
var redisList = iredisClient.Lists[listId];
redisList.RemoveValue(t);
iredisClient.Save();
}
}
/// <summary>
/// 根据lambada表达式删除符合条件的实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="func"></param>
public static void RemoveEntityFromList<T>(string listId, Func<T, bool> func)
{
using (IRedisTypedClient<T> iredisClient = RedisCacheHelper.GetClient().As<T>())
{
var redisList = iredisClient.Lists[listId];
T value = redisList.Where(func).FirstOrDefault();
redisList.RemoveValue(value);
iredisClient.Save();
}
}
#endregion
#region get操作
/// <summary>
/// 根据key值获取value
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetValue(string key)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetValue(key);
}
}
/// <summary>
/// 获得hash型key某个字段的值
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
public static string GetValueFromHash(string hashId, string key)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
string value = redisClient.GetValueFromHash(hashId, key);
return value;
}
}
/// <summary>
/// 判断hash中是否存在某个key
/// </summary>
/// <param name="hashId"></param>
/// <param name="key"></param>
/// <returns></returns>
public static bool HashContainsEntry(string hashId, string key)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.HashContainsEntry(hashId, key);
}
}
/// <summary>
/// 判断某个key是否存在
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool ContainsKey(string key)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.ContainsKey(key);
}
}
/// <summary>
/// 判断一个Key是否存在Set中
/// </summary>
/// <param name="setId"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool SortedSetContainsItem(string setId, string value)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.SortedSetContainsItem(setId, value);
}
}
/// <summary>
/// 获取hash的数量
/// </summary>
/// <param name="hashId"></param>
/// <returns></returns>
public static long GetHashCount(string hashId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetHashCount(hashId);
}
}
/// <summary>
/// 获取set的数量
/// </summary>
/// <param name="setId"></param>
/// <returns></returns>
public static long GetSetCount(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetSetCount(setId);
}
}
/// <summary>
/// 获取某一个值在set的下标
/// </summary>
/// <param name="setId"></param>
/// <param name="value"></param>
/// <returns></returns>
public static long GetItemIndexInSortedSet(string setId, string value)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetItemIndexInSortedSet(setId, value);
}
}
/// <summary>
/// 获取SortSet数量
/// </summary>
/// <param name="setId"></param>
/// <returns></returns>
public static long GetSortedSetCount(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetSortedSetCount(setId);
}
}
/// <summary>
/// 获取Set里的所有数据
/// </summary>
/// <param name="setId"></param>
/// <returns></returns>
public static HashSet<string> GetAllItemsFromSet(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetAllItemsFromSet(setId);
}
}
/// <summary>
/// 获取SortedSet的所有项,按分数倒序
/// </summary>
/// <param name="setId"></param>
/// <returns></returns>
public static List<string> GetAllItemsFromSortedSetDesc(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetAllItemsFromSortedSetDesc(setId);
}
}
/// <summary>
/// 获取SortedSet的所有项
/// </summary>
/// <param name="setId"></param>
/// <returns></returns>
public static List<string> GetAllItemsFromSortedSet(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetAllItemsFromSortedSet(setId);
}
}
/// <summary>
/// 获取SortedSet的分数
/// </summary>
/// <param name="setId"></param>
/// <param name="value"></param>
/// <returns></returns>
public static double? GetItemScoreInSortedSet(string setId, string value)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetItemScoreInSortedSet(setId, value);
}
}
/// <summary>
/// 获取SortedSet的值和分数
/// </summary>
/// <param name="setId"></param>
/// <returns></returns>
public static IDictionary<string, double> GetAllWithScoresFromSortedSet(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetAllWithScoresFromSortedSet(setId);
}
}
/// <summary>
/// 搜key
/// </summary>
/// <param name="pattern"></param>
/// <returns></returns>
public static List<string> SearchKeys(string pattern)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.SearchKeys(pattern);
}
}
#endregion
#region Set操作
/// <summary>
/// 设置hash型key某个字段的值
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <param name="value"></param>
public static void SetHashField(string hashId, string key, string value)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
redisClient.SetEntryInHash(hashId, key, value);
}
}
/// <summary>
/// 插入内容到SortedSet
/// </summary>
/// <param name="setId"></param>
/// <param name="value">值</param>
/// <param name="score">分数</param>
/// <returns></returns>
public static bool AddItemToSortedSet(string setId, string value, double score)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.AddItemToSortedSet(setId, value, score);
}
}
/// <summary>
/// 插入内容到SortedSet
/// </summary>
/// <param name="setId"></param>
/// <param name="value">值</param>
/// <returns></returns>
public static bool AddItemToSortedSet(string setId, string value)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.AddItemToSortedSet(setId, value);
}
}
/// <summary>
/// 往Set里写内容
/// </summary>
/// <param name="setId"></param>
/// <param name="item"></param>
public static void AddItemToSet(string setId, string item)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
redisClient.AddItemToSet(setId, item);
}
}
/// <summary>
/// 从SortedSet中取出分数最低的一条记录
/// </summary>
/// <param name="client"></param>
/// <param name="setId"></param>
/// <returns></returns>
public static string PopItemWithLowestScoreFromSortedSet(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.PopItemWithLowestScoreFromSortedSet(setId);
}
}
/// <summary>
/// 从SortedSet中取出分数最高的一条记录
/// </summary>
/// <param name="setId"></param>
/// <returns></returns>
public static string PopItemWithHighestScoreFromSortedSet(string setId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.PopItemWithHighestScoreFromSortedSet(setId);
}
}
/// <summary>
/// 设置字符串缓存
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void SetEntry(string key, string value)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
redisClient.SetEntry(key, value);
}
}
/// <summary>
/// 设置字符串缓存
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="timeSpan">过期时间</param>
public static void SetEntry(string key, string value, TimeSpan timeSpan)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
redisClient.SetEntry(key, value, timeSpan);
}
}
#endregion
#region REMOVE 移除相关命令
/// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool Remove(string key)
{
if (!string.IsNullOrWhiteSpace(key))
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.Remove(key);
}
}
return false;
}
/// <summary>
/// 移除Sorted
/// <param name="setId"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool RemoveItemFromSortedSet(string setId, string value)
{
if (!string.IsNullOrWhiteSpace(setId) && !string.IsNullOrWhiteSpace(value))
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.RemoveItemFromSortedSet(setId, value);
}
}
return false;
}
/// <summary>
/// 移除hash中的key
/// </summary>
/// <param name="hashId"></param>
/// <param name="key"></param>
/// <returns></returns>
public static bool RemoveEntryFromHash(string hashId, string key)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.RemoveEntryFromHash(hashId, key);
}
}
/// <summary>
/// 从Set中移除值
/// </summary>
/// <param name="client"></param>
/// <param name="setId"></param>
/// <param name="item"></param>
public static void RemoveItemFromSet(string setId, string item)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
redisClient.RemoveItemFromSet(setId, item);
}
}
#endregion
#region 判断
/// <summary>
/// 设置某个Key过期
/// </summary>
/// <param name="key"></param>
/// <param name="expireAt"></param>
/// <returns></returns>
public static bool ExpireEntryAt(string key, DateTime expireAt)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.ExpireEntryAt(key, expireAt);
}
}
/// <summary>
/// 设置某个Key过期
/// </summary>
/// <param name="key">jian</param>
/// <param name="expireAt"></param>
/// <returns></returns>
public static bool ExpireEntryIn(string key, TimeSpan timeSpan)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.ExpireEntryIn(key, timeSpan);
}
}
#endregion
#region hash
/// <summary>
/// 获取hash表的key集合
/// </summary>
/// <param name="hashId"></param>
/// <returns></returns>
public static List<string> GetHashKeys(string hashId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
return redisClient.GetHashKeys(hashId);
}
}
/// <summary>
/// 获得某个hash型key下的所有值
/// </summary>
/// <param name="hashId"></param>
/// <returns></returns>
public static List<string> GetHashValues(string hashId)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
List<string> hashValues = redisClient.GetHashValues(hashId);
return hashValues;
}
}
/// <summary>
///使某个字段增加
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <param name="incre"></param>
/// <returns></returns>
public static void SetHashIncr(string key, string field, int incre)
{
using (var redisClient = RedisCacheHelper.GetClient())
{
redisClient.IncrementValueInHash(key, field, incre);
}
}
#endregion
#region 重命名
/// <summary>
/// 重命名
/// </summary>
/// <param name="fromName">之前的名称</param>
/// <param name="toName">修改后的名称</param>
public static void RenameKey(string fromName, string toName)
{
using (var redisClient = GetClient())
{
redisClient.RenameKey(fromName, toName);
}
}
#endregion
#region 清空redis
/// <summary>
///
/// </summary>
/// <param name="noDeleteKeys">不删的keys</param>
public static void FlushRedisdb(List<string> noDeleteKeys = null)
{
using (var redisClient = GetClient())
{
var keys = redisClient.GetAllKeys();
foreach (string key in keys)
{
if (noDeleteKeys != null && noDeleteKeys.Count > 0 && noDeleteKeys.Contains(key))
{
//不删
}
else
{
//删
redisClient.Remove(key);
}
}
}
}
#endregion
#region 按照规则删除redis历史数据
/// <summary>
/// 按照规则删除redis历史数据
/// </summary>
/// <param name="foucsday">当日</param>
/// <param name="IsReserveYesterday">是否要保留当日的昨天数据</param>
/// <param name="hashId">指定的hashid</param>
public static void ClearRedisHis(DateTime foucsday, bool IsReserveYesterday = false, string hashId = "")
{
string reserveToday = foucsday.ToString("yyyyMMdd");
string reserveYesterday = foucsday.AddDays(-1).ToString("yyyyMMdd");
using (var redisClient = GetClient())
{
#region
if (!string.IsNullOrWhiteSpace(hashId))
{
//按hash删
List<string> keys = redisClient.GetHashKeys(hashId);
foreach (var t_key in keys)
{
if (t_key.Length < 8)
{
continue;//单号长度太短
}
if (IsReserveYesterday)
{
if (t_key.IndexOf(reserveToday) < 0//不是今天
&& t_key.IndexOf(reserveYesterday) < 0//也不是昨天
)
{
//移除
redisClient.RemoveEntryFromHash(hashId, t_key);
}
}
else
{
if (t_key.IndexOf(reserveToday) < 0//不是今天
)
{
//移除
redisClient.RemoveEntryFromHash(hashId, t_key);
}
}
}
}
else
{
//按key删除
List<string> keys = redisClient.SearchKeys("*");
foreach (var t_key in keys)
{
if (t_key.Length < 8)
{
continue;//单号长度太短
}
if (IsReserveYesterday)
{
if (t_key.IndexOf(reserveToday) < 0//不是今天
&& t_key.IndexOf(reserveYesterday) < 0//也不是昨天
)
{
//移除
redisClient.Remove(t_key);
}
}
else
{
if (t_key.IndexOf(reserveToday) < 0//不是今天
)
{
//移除
redisClient.Remove(t_key);
}
}
}
}
#endregion
}
}
#endregion
}
~~~