510 lines
16 KiB
C#
510 lines
16 KiB
C#
|
|
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>(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的连接字符串
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// TradeManageMessage 和 TradeManageMessage:MQ队列
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// TradeManageMessage 和 TradeManageMessage:MQ队列
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool EnQeenTradeManageMessage<T>(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<string> 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<T>(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<T>(string key)
|
|||
|
|
{
|
|||
|
|
T result = default(T);
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
//从尾部取值
|
|||
|
|
result = GetClient().RPop<T>(key);
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
LoggerManager.GetLogger("redis").Error($"DeQueen:key={key},错误信息:{e}");
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 设置hash值
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key"></param>
|
|||
|
|
/// <param name="field"></param>
|
|||
|
|
/// <param name="value"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 根据表名,键名,获取hash值
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key">表名</param>
|
|||
|
|
/// <param name="field">键名</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取指定key中所有字段
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static Dictionary<string, string> 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<string, string>();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 根据表名,键名,删除hash值
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key">表名</param>
|
|||
|
|
/// <param name="field">键名</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// <summary>
|
|||
|
|
/// 保存单个key value
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key">Redis Key</param>
|
|||
|
|
/// <param name="value">保存的值</param>
|
|||
|
|
/// <param name="expiry">过期时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static async Task<bool> StringSetAsync<T>(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}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 保存一个对象
|
|||
|
|
/// </summary>
|
|||
|
|
/// <typeparam name="T"></typeparam>
|
|||
|
|
/// <param name="key"></param>
|
|||
|
|
/// <param name="obj"></param>
|
|||
|
|
/// <param name="expiry"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool StringSet<T>(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}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取单个key的值
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key">Redis Key</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static async Task<string> 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<T> StringGetAsync<T>(string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var result = await GetClient().GetAsync<T>(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<T>(string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var result = GetClient().Get<T>(key);
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
LoggerManager.GetLogger("redis").Error($"StringGet:key={key},错误信息:{e}");
|
|||
|
|
throw new Exception($"redis error:StringGet: key ={ key },错误信息:{e}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 删除单个key
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key">redis key</param>
|
|||
|
|
/// <returns>是否删除成功</returns>
|
|||
|
|
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<bool> 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}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 判断key是否存储
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="key">redis key</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool KeyExists(string key)
|
|||
|
|
{
|
|||
|
|
return GetClient().Exists(key);
|
|||
|
|
}
|
|||
|
|
public static async Task<bool> KeyExistsAsync(string key)
|
|||
|
|
{
|
|||
|
|
return await GetClient().ExistsAsync(key);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取list的redis
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="orgid"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static Dictionary<string, string> GetListKeys(Guid orgid)
|
|||
|
|
{
|
|||
|
|
return GetClient().HGetAll("opt_list_" + orgid);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 删除list中的某张表数据
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="orgid"></param>
|
|||
|
|
/// <param name="name"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool DeleteListKeys(Guid orgid, string name)
|
|||
|
|
{
|
|||
|
|
if (GetClient().HExists("opt_list_" + orgid, name))
|
|||
|
|
{
|
|||
|
|
GetClient().HDel("opt_list_" + orgid, name);
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 是否存在
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="orgid"></param>
|
|||
|
|
/// <param name="name"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool ExistsListKeys(Guid orgid, string name)
|
|||
|
|
{
|
|||
|
|
return GetClient().HExists("opt_list_" + orgid, name);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取list中表的rediskey
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="orgid"></param>
|
|||
|
|
/// <param name="name"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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;
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
}
|