using APT.Infrastructure.Core; using CSRedis; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; namespace APT.Infrastructure.Api.Redis { public class CsRedisManager { static CSRedisClient redisManger = null; public static CSRedisClient GetClient() { return redisManger; } static JsonSerializerSettings _jsonSetting; public static string ConvertJson(T value) { string result = value is string ? value.ToString() : JsonConvert.SerializeObject(value, _jsonSetting); return result; } static CsRedisManager() { _jsonSetting = new JsonSerializerSettings(); _jsonSetting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; RedisOption option = ConfigurationManager.RedisOption; if (option != null) { //SysCustomKey = option.RedisPrefixKey; //RedisConnectionString = option.RedisConnectionString; //RedisPwd = option.RedisConnectionPwd; } else { throw new Exception($"未加载redis.json文件"); } redisManger = new CSRedisClient(option.RedisConnectionString); //Redis的连接字符串 } /// /// TradeManageMessage 和 TradeManageMessage:MQ队列 /// /// public static bool EnQeenTradeManageMessage(string value) { try { LoggerManager.GetLogger("redis").Info("yinzhou--EnQeenTradeManageMessage:" + value); //从头部插入 GetClient().LPush("TradeManageMessage", value); GetClient().LPush("TradeManageMessage:MQ", value); return true; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"EnQeenTradeManageMessage:key=TradeManageMessage:MQ,value={value},错误信息:{e}"); return false; } } /// /// TradeManageMessage 和 TradeManageMessage:MQ队列 /// /// public static bool EnQeenTradeManageMessage(T value) { try { //从头部插入 GetClient().LPush("TradeManageMessage", value); GetClient().LPush("TradeManageMessage:MQ", value); return true; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"EnQeenTradeManageMessage:key=TradeManageMessage:MQ,value={value},错误信息:{e}"); return false; } } public static bool EnQueen(string key, string value) { try { //从头部插入 GetClient().LPush(key, value); return true; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"EnQueen:key={key},value={value},错误信息:{e}"); return false; } } public static string DeQueen(string key) { string result = ""; try { //从尾部取值 result = GetClient().RPop(key); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"DeQueen:key={key},错误信息:{e}"); return result; } } //redis订阅模式 public static void Sub(string key, Action action) { GetClient().Subscribe((key, msg => action(msg.Body))); } public static string[] DeQueenAll(string key) { string[] result = { }; try { long len = GetClient().LLen(key); //取出指定数量数据 result = GetClient().LRange(key, 0, len - 1); //删除指定数据 bool res = GetClient().LTrim(key, len, -1); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"DeQueen:key={key},错误信息:{e}"); return result; } } public static bool EnQueen(string key, T value) { try { //从头部插入 long len = GetClient().LPush(key, value); if (len > 0) return true; else return false; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"EnQueenObj:key={key},value={value},错误信息:{e}"); return false; } } public static T DeQueen(string key) { T result = default(T); try { //从尾部取值 result = GetClient().RPop(key); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"DeQueen:key={key},错误信息:{e}"); return result; } } /// /// 设置hash值 /// /// /// /// /// public static bool SetHash(string key, string field, string value) { try { GetClient().HSet(key, field, value); return true; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"SetHash:key={key},value={value},错误信息:{e}"); return false; } } /// /// 根据表名,键名,获取hash值 /// /// 表名 /// 键名 /// public static string GetHash(string key, string field) { string result = ""; try { result = GetClient().HGet(key, field); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"GetHash:key={key},错误信息:{e}"); return result; } } /// /// 获取指定key中所有字段 /// /// /// public static Dictionary GetHashAll(string key) { try { var result = GetClient().HGetAll(key); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"GetHash:key={key},错误信息:{e}"); return new Dictionary(); } } /// /// 根据表名,键名,删除hash值 /// /// 表名 /// 键名 /// public static long DeleteHash(string key, string field) { long result = 0; try { result = GetClient().HDel(key, field); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"GetHash:key={key}", e); throw new Exception($"redis error:DeleteHash: key ={ key },错误信息:{e}"); } } // /// 保存单个key value /// /// Redis Key /// 保存的值 /// 过期时间 /// public static async Task StringSetAsync(string key, T value, int expiry = -1) { try { string json = ConvertJson(value); var result = await GetClient().SetAsync(key, json, expiry); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringSetAsync:key={key}", e); throw new Exception($"redis error:StringSetAsync: key ={ key },错误信息:{e}"); } } /// /// 保存一个对象 /// /// /// /// /// /// public static bool StringSet(string key, T obj, int expiry = -1) { try { string json = ConvertJson(obj); var result = GetClient().Set(key, json, expiry); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringSet:key={key},错误信息:{e}"); throw new Exception($"redis error:StringSet: key ={ key },错误信息:{e}"); } } /// /// 获取单个key的值 /// /// Redis Key /// public static async Task StringGetAsync(string key) { try { var result = await GetClient().GetAsync(key); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringGetAsync:key={key},错误信息:{e}"); throw new Exception($"redis error:StringGetAsync: key ={ key },错误信息:{e}"); } } public static string StringGet(string key) { try { var result = GetClient().Get(key); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringGet:key={key},错误信息:{e}"); throw new Exception($"redis error:StringGet: key ={ key },错误信息:{e}"); } } public static async Task StringGetAsync(string key) { try { var result = await GetClient().GetAsync(key); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringGetAsync:key={key},错误信息:{e}"); throw new Exception($"redis error:StringGetAsync: key ={ key },错误信息:{e}"); } } public static T StringGet(string key) { try { var result = GetClient().Get(key); return result; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringGet:key={key},错误信息:{e}"); throw new Exception($"redis error:StringGet: key ={ key },错误信息:{e}"); } } /// /// 删除单个key /// /// redis key /// 是否删除成功 public static bool KeyDelete(string key) { try { var result = GetClient().Del(key); return true; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringGet:key={key},错误信息:{e}"); throw new Exception($"redis error:KeyDelete: key ={ key },错误信息:{e}"); } } public static async Task KeyDeleteAsync(string key) { try { var result = await GetClient().DelAsync(key); return true; } catch (Exception e) { LoggerManager.GetLogger("redis").Error($"StringGet:key={key},错误信息:{e}"); throw new Exception($"redis error:KeyDeleteAsync: key ={ key },错误信息:{e}"); } } /// /// 判断key是否存储 /// /// redis key /// public static bool KeyExists(string key) { return GetClient().Exists(key); } public static async Task KeyExistsAsync(string key) { return await GetClient().ExistsAsync(key); } /// /// 获取list的redis /// /// /// public static Dictionary GetListKeys(Guid orgid) { return GetClient().HGetAll("opt_list_" + orgid); } /// /// 删除list中的某张表数据 /// /// /// /// public static bool DeleteListKeys(Guid orgid, string name) { if (GetClient().HExists("opt_list_" + orgid, name)) { GetClient().HDel("opt_list_" + orgid, name); } return true; } /// /// 是否存在 /// /// /// /// public static bool ExistsListKeys(Guid orgid, string name) { return GetClient().HExists("opt_list_" + orgid, name); } /// /// 获取list中表的rediskey /// /// /// /// public static string GetListKey(Guid orgid, string name) { return GetClient().HGet("opt_list_" + orgid, name); } //private object deleteCache( Method method, Object[] args) //{ // object flag = false; // String fieldkey = parseKey(method, args); // try // { // if (fieldkey.equals("")) // { // cacheClient.del(cache.key()); // } // else // { // cacheClient.hdel(cache.key(), fieldkey); // } // flag = true; // } // catch (Exception e) // { // //System.out.println(e.getMessage()); // flag = false; // } // return flag; //} /** * 获取值field * @param key * @param method * @param args * @return * @throws Exception */ // public string parseKey(Method method, Object[] args) // { // string fieldKey = ""; // for (int i = 0; i < method.getParameters().length; i++) // { // Parameter p = method.getParameters()[i]; // FieldAnnotation f = p.getAnnotation(FieldAnnotation.class); // if(f!=null) { // fieldKey+=args[i].toString()+":"; // }else { // FieldOnlyKeyAnnotation fo = p.getAnnotation(FieldOnlyKeyAnnotation.class); // if(fo != null) { // fieldKey+=args[i].toString(); //} // } // } // return fieldKey; // } } }