123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- using System;
- using System.Collections.Generic;
- using ServiceStack.Redis;
- using CP.Cache.Redis.Config;
- using Newtonsoft.Json;
- using ServiceStack.Text;
- namespace CP.Cache.Redis
- {
- public class RedisManager : ICache
- {
- static PooledRedisClientManager pooledRedis;
- static RedisManager()
- {
- RedisConfig redis = RedisConfigPool.GetRedisConfig();
- List<string> readWriteHosts = new List<string>();
- var readOnlyHosts = new List<string>();
- redis.ReadWriteHosts.ForEach(p =>
- {
- readWriteHosts.Add(p.Host);
- });
- redis.ReadOnlyHosts.ForEach(p =>
- {
- readOnlyHosts.Add(p.Host);
- });
- pooledRedis = new PooledRedisClientManager(readWriteHosts.ToArray(), readOnlyHosts.ToArray(), redis.RedisClientManagerConfig);
- }
- public static IRedisClient GetClient()
- {
- RedisConfig redisConfig = RedisConfigPool.GetRedisConfig();
- IRedisClient redis = pooledRedis.GetClient();
- if (redisConfig.ConnectTimeout > 0)
- {
- redis.ConnectTimeout = redisConfig.ConnectTimeout;
- }
- if (redisConfig.RetryCount > 0)
- {
- redis.RetryCount = redisConfig.RetryCount;
- }
- if (redisConfig.RetryTimeout > 0)
- {
- redis.RetryTimeout = redisConfig.RetryTimeout;
- }
- if (redisConfig.SendTimeout > 0)
- {
- redis.SendTimeout = redisConfig.SendTimeout;
- }
- redis.Password = redisConfig.Password;
- return redis;
- }
- public bool IsExist(string key)
- {
- using (IRedisClient redis = GetClient())
- {
- return redis.ContainsKey(key);
- }
- }
- /// <summary>
- /// 添加实体集合到缓存中
- /// </summary>
- /// <param name="key">缓存键</param>
- /// <typeparam name="T">实体类型</typeparam>
- /// <param name="entities">实体集合</param>
- /// <returns>成功返回True,失败返回False</returns>
- public void AddObject<T>(string key, T t, int expires = 0)
- {
- using (IRedisClient redis = GetClient())
- {
- if (expires > 0)
- redis.Set<T>(key, t, DateTime.Now.AddMinutes(expires));
- else
- redis.Set<T>(key, t);
- }
- }
- /// <summary>
- /// 返回T
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="key"></param>
- /// <returns></returns>
- public T GetObject<T>(string key)
- {
- var tp = typeof(T);
- if (tp.IsArray)
- {
- return JsonConvert.DeserializeObject<T>(GetString(key));
- }
- using (IRedisClient redis = GetClient())
- {
- return redis.Get<T>(key);
- }
- }
- /// <summary>
- /// 获取文本
- /// </summary>
- /// <param name="key">缓存键名</param>
- /// <returns>返回对应的键值或者string.Empty</returns>
- public string GetString(string key)
- {
- return GetObject<string>(key);
- }
- /// <summary>
- /// 获取所有键
- /// </summary>
- /// <returns>返回所有缓存键</returns>
- public List<string> GetKeys()
- {
- using (IRedisClient redis = GetClient())
- {
- return redis.GetAllKeys();
- }
- }
- /// <summary>
- /// 删除指定键缓存
- /// </summary>
- /// <param name="key">键名</param>
- /// <returns>成功返回True,失败返回False</returns>
- public void RemoveObject(string key)
- {
- using (IRedisClient redis = GetClient())
- {
- redis.Remove(key);
- }
- }
- /// <summary>
- /// 批量移出类型key的对像
- /// </summary>
- /// <param name="key"></param>
- public void RemoveObjectByRegex(string key)
- {
- var list = GetKeys();
- if (list != null && list.Count > 0)
- {
- foreach(string item in list)
- {
- if (item.IndexOf(key, StringComparison.CurrentCultureIgnoreCase) != -1)
- RemoveObject(key);
- }
- }
- }
- /// <summary>
- /// 删除指定键缓存
- /// </summary>
- /// <param name="keys">键名</param>
- public void RemoveAll()
- {
- using (IRedisClient redis = GetClient())
- {
- List<string> keys = GetKeys();
- redis.RemoveAll(keys);
- }
- }
- }
- }
|