diff --git a/src/Utils/Caching/Distributed/Masa.Utils.Caching.Redis/RedisCacheClient.cs b/src/Utils/Caching/Distributed/Masa.Utils.Caching.Redis/RedisCacheClient.cs index 535529b54..ad400bd01 100644 --- a/src/Utils/Caching/Distributed/Masa.Utils.Caching.Redis/RedisCacheClient.cs +++ b/src/Utils/Caching/Distributed/Masa.Utils.Caching.Redis/RedisCacheClient.cs @@ -367,7 +367,7 @@ public async Task<List<string>> GetKeysAsync(string keyPattern) foreach (var redisResult in arrayRedisResult) { var byteArray = (RedisValue[])redisResult.Value; - MapMetadata(byteArray, out DateTimeOffset? absExpr, out TimeSpan? sldExpr, out RedisValue data); + MapMetadataByAutomatic(byteArray, out DateTimeOffset? absExpr, out TimeSpan? sldExpr, out RedisValue data); func.Invoke(redisResult.Key, absExpr, sldExpr); dictionary.Add(redisResult.Key, ConvertToValue<T>(data)); } @@ -535,7 +535,29 @@ private void RefreshCore( } } - private static void MapMetadata(RedisValue[] results, out DateTimeOffset? absoluteExpiration, out TimeSpan? slidingExpiration, + private static void MapMetadata(RedisValue[] results, + out DateTimeOffset? absoluteExpiration, + out TimeSpan? slidingExpiration, + out RedisValue data) + { + absoluteExpiration = null; + slidingExpiration = null; + data = results.Length > 2 ? results[2] : RedisValue.Null; + var absoluteExpirationTicks = (long?)results[0]; + if (absoluteExpirationTicks.HasValue && absoluteExpirationTicks.Value != NOT_PRESENT) + { + absoluteExpiration = new DateTimeOffset(absoluteExpirationTicks.Value, TimeSpan.Zero); + } + + var slidingExpirationTicks = (long?)results[1]; + if (slidingExpirationTicks.HasValue && slidingExpirationTicks.Value != NOT_PRESENT) + { + slidingExpiration = new TimeSpan(slidingExpirationTicks.Value); + } + } + + private static void MapMetadataByAutomatic(RedisValue[] results, out DateTimeOffset? absoluteExpiration, + out TimeSpan? slidingExpiration, out RedisValue data) { absoluteExpiration = null; diff --git a/src/Utils/Caching/Distributed/Tests/Masa.Utils.Caching.Redis.Tests/DistributedCacheClientTest.cs b/src/Utils/Caching/Distributed/Tests/Masa.Utils.Caching.Redis.Tests/DistributedCacheClientTest.cs index 291f07dfc..cbfd7db5a 100644 --- a/src/Utils/Caching/Distributed/Tests/Masa.Utils.Caching.Redis.Tests/DistributedCacheClientTest.cs +++ b/src/Utils/Caching/Distributed/Tests/Masa.Utils.Caching.Redis.Tests/DistributedCacheClientTest.cs @@ -58,4 +58,22 @@ public async Task TestGetListByKeyPatternAsyncReturnCountIs1() Assert.AreEqual(1, dictionary.Count); Assert.IsTrue(dictionary["test1"] == "test1:Result"); } + + [DataTestMethod] + [DataRow("test1", "Result1")] + public async Task TestGetAsyncReturnResult1(string key, string value) + { + _cacheClient.Set(key, value); + var res = await _cacheClient.GetAsync<string>(key); + Assert.AreEqual(value, res); + } + + [DataTestMethod] + [DataRow("test1", "Result1")] + public void TestGetReturnResult1(string key, string value) + { + _cacheClient.Set(key, value); + var res = _cacheClient.Get<string>(key); + Assert.AreEqual(value, res); + } }