From 3d3546ae80dc06c20b14597bd697b82b1c95e376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=81=B0=E7=81=B0?= Date: Wed, 7 Dec 2022 01:22:26 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91redis?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=BB=93=E5=82=A8=E5=A2=9E=E5=8A=A0=E9=80=9A?= =?UTF-8?q?=E8=BF=87Lua=E8=84=9A=E6=9C=AC=E6=9F=A5=E8=AF=A2key=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E5=95=86=E5=93=81=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=90=8E=E6=B8=85=E7=90=86=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=9A=84=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RedisCache/IRedisOperationRepository.cs | 101 ++++++++++- .../RedisCache/RedisOperationRepository.cs | 162 ++++++++++++------ .../Good/CoreCmsGoodsController.cs | 6 +- 3 files changed, 208 insertions(+), 61 deletions(-) diff --git a/CoreCms.Net.Caching/AutoMate/RedisCache/IRedisOperationRepository.cs b/CoreCms.Net.Caching/AutoMate/RedisCache/IRedisOperationRepository.cs index 21f0473a..6b4a8947 100644 --- a/CoreCms.Net.Caching/AutoMate/RedisCache/IRedisOperationRepository.cs +++ b/CoreCms.Net.Caching/AutoMate/RedisCache/IRedisOperationRepository.cs @@ -62,7 +62,6 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// public Task LockTakeAsync(string key, string value, TimeSpan cacheTime); - /// /// 获取值 /// @@ -70,6 +69,11 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// Task Get(string key); + /// + /// 获取一个值 + /// + /// + /// RedisValue StringGet(string key); /// @@ -79,29 +83,88 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// List SearchKey(string pattern); - //获取值,并序列化 + /// + /// 获取值,并序列化 + /// + /// + /// + /// Task Get(string key); + /// + /// 获取一个值 + /// + /// + /// + /// + /// //保存 Task StringSetAsync(string key, string value, TimeSpan cacheTime); + /// + /// 获取一个值 + /// + /// + /// + /// + /// bool StringSet(string key, string value, TimeSpan cacheTime); - + + /// + /// 获取一个值 + /// + /// + /// + /// bool StringSet(string key, string value); + /// + /// 获取一个值 + /// + /// + /// + /// bool StringSet(string key, RedisValue value); + /// + /// 获取一个值 + /// + /// + /// + /// + /// bool StringSet(string key, RedisValue value, TimeSpan cacheTime); - + /// + /// 设置一个缓存 + /// + /// + /// + /// + /// Task SetAsync(string key, object value, TimeSpan cacheTime); + /// + /// Increment 递增 + /// + /// + /// + /// Task StringIncrement(string key, long value=1); - //判断是否存在 + /// + /// 判断是否存在 + /// + /// + /// Task KeyExistsAsync(string key); + /// + /// 判断是否存在 + /// + /// + /// bool KeyExists(string key); /// @@ -111,11 +174,35 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// Task KeyTime(string key); - //移除某一个缓存值 + /// + /// 删除异步 + /// + /// + /// Task KeyDeleteAsync(string key); + /// + /// 删除key + /// + /// void KeyDelete(string key); - //全部清除 + /// + /// 模糊删除 + /// + /// + void LikeRemove(string pattern); + + /// + /// 模糊删除异步 + /// + /// + /// + Task LikeRemoveAsync(string pattern); + + /// + /// 全部清除 + /// + /// Task Clear(); /// diff --git a/CoreCms.Net.Caching/AutoMate/RedisCache/RedisOperationRepository.cs b/CoreCms.Net.Caching/AutoMate/RedisCache/RedisOperationRepository.cs index df6b2c98..77b7654a 100644 --- a/CoreCms.Net.Caching/AutoMate/RedisCache/RedisOperationRepository.cs +++ b/CoreCms.Net.Caching/AutoMate/RedisCache/RedisOperationRepository.cs @@ -114,7 +114,6 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache return await _database.LockReleaseAsync(key, value); } - /// /// 判断key是否存在 /// @@ -122,7 +121,7 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// public async Task KeyExistsAsync(string key) { - + return await _database.KeyExistsAsync(key); } @@ -134,10 +133,9 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache public bool KeyExists(string key) { - return _database.KeyExists(key); + return _database.KeyExists(key); } - /// /// 获取键过期时间 /// @@ -145,19 +143,28 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// public async Task KeyTime(string key) { - + return await _database.KeyTimeToLiveAsync(key); } - + /// + /// 获取值 + /// + /// + /// public async Task Get(string key) { return await _database.StringGetAsync(key); } + /// + /// 获取值 + /// + /// + /// public RedisValue StringGet(string key) { - return _database.StringGet(key); + return _database.StringGet(key); } /// @@ -176,7 +183,7 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache { foreach (var key in (RedisKey[])redisResult) { - + list.Add(key); } } @@ -194,7 +201,48 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache _database.KeyDelete(key); } + /// + /// 模糊删除 + /// + /// + public void LikeRemove(string pattern) + { + var redisResult = _database.ScriptEvaluate(LuaScript.Prepare( + //Redis的keys模糊查询: + " local res = redis.call('KEYS', @keypattern) " + + " return res "), new { @keypattern = pattern }); + if (!redisResult.IsNull) + { + var preSult = (RedisKey[])redisResult; + _database.KeyDelete(preSult); + } + } + + /// + /// 模糊删除 + /// + /// + public async Task LikeRemoveAsync(string pattern) + { + var redisResult = await _database.ScriptEvaluateAsync(LuaScript.Prepare( + //Redis的keys模糊查询: + " local res = redis.call('KEYS', @keypattern) " + + " return res "), new { @keypattern = pattern }); + if (!redisResult.IsNull) + { + var preSult = (RedisKey[])redisResult; + await _database.KeyDeleteAsync(preSult); + } + } + + /// + /// 获取值 + /// + /// + /// + /// + /// public async Task SetAsync(string key, object value, TimeSpan cacheTime) { if (value != null) @@ -204,82 +252,90 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache } } - + /// + /// 获取值 + /// + /// + /// + /// + /// public async Task StringSetAsync(string key, string value, TimeSpan cacheTime) { - - return await _database.StringSetAsync(key, value, cacheTime); + + return await _database.StringSetAsync(key, value, cacheTime); } - - - public bool StringSet(string key, string value, TimeSpan cacheTime) + /// + /// 获取值 + /// + /// + /// + /// + /// + public bool StringSet(string key, string value, TimeSpan cacheTime) { - - return _database.StringSet(key, value, cacheTime); - + return _database.StringSet(key, value, cacheTime); } - + /// + /// 获取值 + /// + /// + /// + /// public bool StringSet(string key, string value) { - return _database.StringSet(key, value); - } - + /// + /// 获取值 + /// + /// + /// + /// + /// public bool StringSet(string key, RedisValue value, TimeSpan cacheTime) { - return _database.StringSet(key, value, cacheTime); - } - + /// + /// 获取值 + /// + /// + /// + /// public bool StringSet(string key, RedisValue value) { - return _database.StringSet(key, value); - } - - /// /// Increment 递增 /// /// /// /// - public async Task StringIncrement(string key, long value=1) + public async Task StringIncrement(string key, long value = 1) { - - return await _database.StringIncrementAsync(key, value); - + return await _database.StringIncrementAsync(key, value); } - - - + /// + /// 获取一个值并序列化 + /// + /// + /// + /// public async Task Get(string key) { var value = await _database.StringGetAsync(key); - if (value.HasValue) - { - //需要用的反序列化,将Redis存储的Byte[],进行反序列化 - return JsonConvert.DeserializeObject(value); - } - else - { - return default; - } + //需要用的反序列化,将Redis存储的Byte[],进行反序列化 + return value.HasValue ? JsonConvert.DeserializeObject(value) : default; } - - - /// /// 根据key获取RedisValue /// @@ -439,7 +495,7 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// 分数 public async Task SortedSetAddAsync(string redisKey, string redisValue, double score) { - return await _database.SortedSetAddAsync(redisKey, redisValue, score); + return await _database.SortedSetAddAsync(redisKey, redisValue, score); } /// @@ -470,7 +526,7 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// public async Task SortedSetRankAsync(string key, string value) { - var result= await _database.SortedSetRankAsync(key,value); + var result = await _database.SortedSetRankAsync(key, value); return result; } @@ -506,16 +562,16 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// public async Task> SortedSetRangeByRankAsync(string redisKey, int start, int stop) { - var result= await _database.SortedSetRangeByRankAsync(redisKey, start, stop); + var result = await _database.SortedSetRangeByRankAsync(redisKey, start, stop); + - return result.Select(o => o.ToString()); } - + /// /// 移出序列表里的指定范围数量 /// @@ -523,7 +579,7 @@ namespace CoreCms.Net.Caching.AutoMate.RedisCache /// 0 是第一个 /// 最大分数值 /// - public async Task SortedSetRemoveRangeByRankAsync(string redisKey, int start, int stop) + public async Task SortedSetRemoveRangeByRankAsync(string redisKey, int start, int stop) { return await _database.SortedSetRemoveRangeByRankAsync(redisKey, start, stop); } diff --git a/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs b/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs index 1758b2f2..105deebc 100644 --- a/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs +++ b/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs @@ -15,6 +15,7 @@ using System.IO; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using CoreCms.Net.Caching.AutoMate.RedisCache; using CoreCms.Net.Configuration; using CoreCms.Net.Filter; using CoreCms.Net.IServices; @@ -58,6 +59,7 @@ namespace CoreCms.Net.Web.Admin.Controllers private readonly ICoreCmsUserGradeServices _userGradeServices; private readonly ICoreCmsProductsDistributionServices _productsDistributionServices; private readonly IWebHostEnvironment _webHostEnvironment; + private readonly IRedisOperationRepository _redisOperationRepository; /// @@ -76,7 +78,7 @@ namespace CoreCms.Net.Web.Admin.Controllers , ICoreCmsGoodsCategoryExtendServices categoryExtendServices , ICoreCmsLabelServices labelServices , ICoreCmsProductsDistributionServices productsDistributionServices - , ICoreCmsGoodsTypeSpecServices goodsTypeSpecServices) + , ICoreCmsGoodsTypeSpecServices goodsTypeSpecServices, IRedisOperationRepository redisOperationRepository) { _webHostEnvironment = webHostEnvironment; _coreCmsGoodsServices = coreCmsGoodsServices; @@ -92,6 +94,7 @@ namespace CoreCms.Net.Web.Admin.Controllers _labelServices = labelServices; _productsDistributionServices = productsDistributionServices; _goodsTypeSpecServices = goodsTypeSpecServices; + _redisOperationRepository = redisOperationRepository; } #region 获取列表============================================================ @@ -531,6 +534,7 @@ namespace CoreCms.Net.Web.Admin.Controllers { await _productsServices.UpdateAsync(p => new CoreCmsProducts() { isDel = true }, p => p.goodsId == model.id); + await _redisOperationRepository.LikeRemoveAsync("SqlSugarDataCache.GoodListDTO." + "*"); } jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;