Skip to content

Commit a1a44f3

Browse files
committed
Add sliding expiration support to EFCoreSecondLevelCacheInterceptor.StackExchange.Redis, Close #297
1 parent 4cec65e commit a1a44f3

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<VersionPrefix>5.2.3</VersionPrefix>
3+
<VersionPrefix>5.2.4</VersionPrefix>
44
<LangVersion>latest</LangVersion>
55
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
66
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>

src/EFCoreSecondLevelCacheInterceptor.StackExchange.Redis/EFStackExchangeRedisCacheProvider.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
using System.Collections.Generic;
31
using Microsoft.Extensions.Options;
42
using StackExchange.Redis;
53

@@ -80,7 +78,14 @@ public void ClearAllCachedEntries()
8078
var redisDb = RedisConnection.GetDatabase();
8179
var maybeValue = redisDb.StringGet(cacheKey.KeyHash);
8280

83-
return maybeValue.HasValue ? dataSerializer.Deserialize<EFCachedData>(maybeValue) : null;
81+
if (!maybeValue.HasValue)
82+
{
83+
return null;
84+
}
85+
86+
ManageSlidingExpiration(cacheKey, cachePolicy, redisDb);
87+
88+
return dataSerializer.Deserialize<EFCachedData>(maybeValue);
8489
}
8590

8691
/// <inheritdoc />
@@ -116,6 +121,14 @@ public void InvalidateCacheDependencies(EFCacheKey cacheKey)
116121
}
117122
}
118123

124+
private static void ManageSlidingExpiration(EFCacheKey cacheKey, EFCachePolicy cachePolicy, IDatabase redisDb)
125+
{
126+
if (cachePolicy.CacheExpirationMode == CacheExpirationMode.Sliding && cachePolicy.CacheTimeout != TimeSpan.Zero)
127+
{
128+
redisDb.KeyExpire(cacheKey.KeyHash, cachePolicy.CacheTimeout, CommandFlags.FireAndForget);
129+
}
130+
}
131+
119132
private ConnectionMultiplexer GetRedisConnection()
120133
{
121134
var options = cacheSettings.Value.AdditionalData as EFRedisCacheConfigurationOptions ??

0 commit comments

Comments
 (0)