diff --git a/FastCache.Redis/Driver/RedisCache.cs b/FastCache.Redis/Driver/RedisCache.cs index f38b751..3802722 100644 --- a/FastCache.Redis/Driver/RedisCache.cs +++ b/FastCache.Redis/Driver/RedisCache.cs @@ -51,7 +51,8 @@ public Task Set(string key, CacheItem cacheItem, long expire = 0) public Task Get(string key) { var cacheValue = _redisClient.Get(key); - if (cacheValue?.AssemblyName == null || cacheValue?.Type == null) return Task.FromResult(new CacheItem()); + if (string.IsNullOrWhiteSpace(cacheValue?.AssemblyName) || string.IsNullOrWhiteSpace(cacheValue?.Type) || + cacheValue?.Value == null) return Task.FromResult(new CacheItem()); var assembly = Assembly.Load(cacheValue.AssemblyName); var valueType = assembly.GetType(cacheValue.Type, true, true); diff --git a/IntegrationTests/MultiSourceApiRequestCacheTests.cs b/IntegrationTests/MultiSourceApiRequestCacheTests.cs index d1e28f1..d2b7b1b 100644 --- a/IntegrationTests/MultiSourceApiRequestCacheTests.cs +++ b/IntegrationTests/MultiSourceApiRequestCacheTests.cs @@ -231,4 +231,15 @@ public async void TestMultiSourceEvictableAllowsEvictionByMultipleRules(string b Assert.Equal("anson1", userDeleted.Name); Assert.Equal(1, userDeleted.Age); } + + [Theory] + [InlineData("/MultiSource")] + public async void TestMultiSourceCacheableMultipleParam(string baseUrl) + { + var responseMessage = await _httpClient.GetAsync($"{baseUrl}/get/two?id=123&name=anson1"); + Assert.Equal(responseMessage.StatusCode, HttpStatusCode.NoContent); + + var responseMessage2 = await _httpClient.GetAsync($"{baseUrl}/get/two?id=123&name=anson1"); + Assert.Equal(responseMessage2.StatusCode, HttpStatusCode.NoContent); + } } \ No newline at end of file diff --git a/TestApi/Controllers/MultiSourceController.cs b/TestApi/Controllers/MultiSourceController.cs index a91ed88..fa8e46d 100644 --- a/TestApi/Controllers/MultiSourceController.cs +++ b/TestApi/Controllers/MultiSourceController.cs @@ -23,6 +23,12 @@ public virtual async Task Get(string id) { return await _userService.Single(id); } + + [HttpGet("get/two")] + public virtual async Task Get(string id, string name) + { + return await _userService.SingleOrDefault(id, name, true); + } [HttpPost] public User Add(User user) diff --git a/TestApi/Service/IMultiSourceService.cs b/TestApi/Service/IMultiSourceService.cs index 62a3f47..02824b3 100644 --- a/TestApi/Service/IMultiSourceService.cs +++ b/TestApi/Service/IMultiSourceService.cs @@ -8,6 +8,8 @@ public interface IMultiSourceService Task Single(string id); + Task SingleOrDefault(string id, string name, bool canChange); + Task SingleOrDefault(string id); Task SingleOrDefaultByName(string name); diff --git a/TestApi/Service/MultiSourceService.cs b/TestApi/Service/MultiSourceService.cs index 743ab41..682c1c9 100644 --- a/TestApi/Service/MultiSourceService.cs +++ b/TestApi/Service/MultiSourceService.cs @@ -22,6 +22,12 @@ public virtual async Task Single(string id) return await dbContext.Set().SingleAsync(x => x.Id == id); } + [MultiSourceCacheable("MultiSource-single", "{id}:{name}", Target.Redis, 60)] + public virtual async Task SingleOrDefault(string id, string name, bool canChange) + { + return await dbContext.Set().SingleOrDefaultAsync(x => x.Id == id && x.Name == name); + } + public virtual async Task Update(User user) { var first = await dbContext.Set().FirstAsync(x => x.Id == user.Id);