RedisHelper类,redis 锁
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); } } } }
判断某一key是否过期,和过期剩余时间
TimeSpan? redisTS = await _redisdb.KeyTimeToLiveAsync(redisKey); RedisValue savedValue = await _redisdb.StringGetAsync(redisKey); if (savedValue.IsNull || !redisTS.HasValue || redisTS.Value.TotalSeconds == 0) return false;
标签:
Redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律