using Newtonsoft.Json; using StackExchange.Redis; using System; using System.Collections.Generic; namespace IITaxTaskScheduler.Common { public class RedisHelper { private IDatabase _redisDb; public RedisHelper(IDatabase redisDb) { _redisDb = redisDb; } /// <summary> /// 取值string /// </summary> /// <param name="key"></param> /// <returns></returns> public string StringGet(string key) { return _redisDb.StringGetAsync(key).Result; } /// <summary> /// 赋值string /// </summary> /// <param name="key"></param> /// <param name="value"></param> public void SetString(string key, object value) { _redisDb.StringSetAsync(key, JsonConvert.SerializeObject(value)); } /// <summary> /// 赋值string /// </summary> /// <param name="key"></param> /// <param name="value"></param> public void SetString(string key, object value, DateTime? expire) { _redisDb.StringSetAsync(key, JsonConvert.SerializeObject(value)); if (expire != null) { _redisDb.KeyExpire(key, expire - DateTime.Now); } } /// <summary> /// 单个push /// </summary> /// <param name="key"></param> /// <param name="value"></param> public void LeftPush(string key, object value) { _redisDb.ListLeftPushAsync(key, JsonConvert.SerializeObject(value)); } /// <summary> /// 批量push /// </summary> /// <param name="key"></param> /// <param name="list"></param> public void LeftPushAll(string key, List<object> list) { foreach (var item in list) { _redisDb.ListLeftPushAsync(key, JsonConvert.SerializeObject(item)); } } /// <summary> /// 请求开始记录redis,并返回可否继续执行 true:可继续执行 false:不可继续执行 /// </summary> /// <param name="key"></param> /// <returns></returns> public bool ActionExecuting(string key) { var result = _redisDb.HashExistsAsync(key, true); if (!result.Result) { _redisDb.HashIncrementAsync(key, true); _redisDb.KeyExpireAsync(key, new TimeSpan(0, 0, 5, 0)); return true; } else { return false; } } /// <summary> /// 请求结算,删除redis记录 /// </summary> /// <param name="key"></param> public void ActionExecuted(string key) { var result = _redisDb.HashExistsAsync(key, true); if (result.Result) { _redisDb.KeyDeleteAsync(key); } } } }