Skip to content

Commit 8d9b6bf

Browse files
author
Travis Whidden
committed
zzzprojects#764 - Refactor Naming for SlidingCache;
1 parent cc8482a commit 8d9b6bf

File tree

4 files changed

+33
-23
lines changed

4 files changed

+33
-23
lines changed

src/System.Linq.Dynamic.Core/Parser/ConstantExpressionHelper.cs

+4-13
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,16 @@ namespace System.Linq.Dynamic.Core.Parser;
77
internal class ConstantExpressionHelper
88
{
99
// Static shared instance to prevent duplications of the same objects
10-
private readonly ThreadSafeSlidingCache<object, Expression> _expressions;
11-
private readonly ThreadSafeSlidingCache<Expression, string> _literals;
10+
private readonly SlidingCache<object, Expression> _expressions;
11+
private readonly SlidingCache<Expression, string> _literals;
1212

1313
public ConstantExpressionHelper(ParsingConfig config)
1414
{
1515
var parsingConfig = Check.NotNull(config);
1616
var cacheConfig = Check.NotNull(parsingConfig.ConstantExpressionCacheConfig);
1717

18-
_literals = new ThreadSafeSlidingCache<Expression, string>(
19-
cacheConfig.TimeToLive,
20-
cacheConfig.CleanupFrequency,
21-
cacheConfig.MinItemsTrigger
22-
);
23-
24-
_expressions = new ThreadSafeSlidingCache<object, Expression>(
25-
cacheConfig.TimeToLive,
26-
cacheConfig.CleanupFrequency,
27-
cacheConfig.MinItemsTrigger
28-
);
18+
_literals = new SlidingCache<Expression, string>(cacheConfig);
19+
_expressions = new SlidingCache<object, Expression>(cacheConfig);
2920
}
3021

3122
public bool TryGetText(Expression expression, out string? text)

src/System.Linq.Dynamic.Core/Util/Cache/ThreadSafeSlidingCache.cs src/System.Linq.Dynamic.Core/Util/Cache/SlidingCache.cs

+22-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace System.Linq.Dynamic.Core.Util.Cache;
66

7-
internal class ThreadSafeSlidingCache<TKey, TValue> where TKey : notnull where TValue : notnull
7+
internal class SlidingCache<TKey, TValue> where TKey : notnull where TValue : notnull
88
{
99
private readonly ConcurrentDictionary<TKey, CacheContainer<TValue>> _cache;
1010
private readonly TimeSpan _cleanupFrequency;
@@ -26,7 +26,7 @@ internal class ThreadSafeSlidingCache<TKey, TValue> where TKey : notnull where T
2626
/// Provides the Time for the Caching object. Default will be created if not supplied. Used
2727
/// for Testing classes
2828
/// </param>
29-
public ThreadSafeSlidingCache(
29+
public SlidingCache(
3030
TimeSpan timeToLive,
3131
TimeSpan? cleanupFrequency = null,
3232
long? minCacheItemsBeforeCleanup = null,
@@ -35,7 +35,26 @@ public ThreadSafeSlidingCache(
3535
_cache = new ConcurrentDictionary<TKey, CacheContainer<TValue>>();
3636
TimeToLive = timeToLive;
3737
_minCacheItemsBeforeCleanup = minCacheItemsBeforeCleanup;
38-
_cleanupFrequency = cleanupFrequency ?? ThreadSafeSlidingCacheConstants.DefaultCleanupFrequency;
38+
_cleanupFrequency = cleanupFrequency ?? SlidingCacheConstants.DefaultCleanupFrequency;
39+
_deleteExpiredCachedItemsDelegate = Cleanup;
40+
_dateTimeProvider = dateTimeProvider ?? new DateTimeUtils();
41+
// To prevent a scan on first call, set the last Cleanup to the current Provider time
42+
_lastCleanupTime = _dateTimeProvider.UtcNow;
43+
}
44+
45+
/// <summary>
46+
/// Sliding Thread Safe Cache
47+
/// </summary>
48+
/// <param name="cashConfig"></param>
49+
/// <param name="dateTimeProvider"></param>
50+
public SlidingCache(
51+
CacheConfig cashConfig,
52+
IDateTimeUtils? dateTimeProvider = null)
53+
{
54+
_cache = new ConcurrentDictionary<TKey, CacheContainer<TValue>>();
55+
TimeToLive = cashConfig.TimeToLive;
56+
_minCacheItemsBeforeCleanup = cashConfig.MinItemsTrigger;
57+
_cleanupFrequency = cashConfig.CleanupFrequency;
3958
_deleteExpiredCachedItemsDelegate = Cleanup;
4059
_dateTimeProvider = dateTimeProvider ?? new DateTimeUtils();
4160
// To prevent a scan on first call, set the last Cleanup to the current Provider time

src/System.Linq.Dynamic.Core/Util/Cache/ThreadSafeSlidingCacheConstants.cs src/System.Linq.Dynamic.Core/Util/Cache/SlidingCacheConstants.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace System.Linq.Dynamic.Core.Util.Cache;
22

3-
internal static class ThreadSafeSlidingCacheConstants
3+
internal static class SlidingCacheConstants
44
{
55
// Default cleanup frequency
66
public static readonly TimeSpan DefaultCleanupFrequency = TimeSpan.FromMinutes(10);

test/System.Linq.Dynamic.Core.Tests/Util/Cache/ThreadSafeSlidingCacheTests.cs test/System.Linq.Dynamic.Core.Tests/Util/Cache/SlidingCacheTests.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace System.Linq.Dynamic.Core.Tests.Util.Cache;
99

10-
public class ThreadSafeSlidingCacheTests
10+
public class SlidingCacheTests
1111
{
1212
private static readonly DateTime UtcNow = new(2024, 1, 1, 0, 0, 0);
1313

@@ -18,7 +18,7 @@ public void ThreadSafeSlidingCache_CacheOperations()
1818
dateTimeUtilsMock.SetupGet(d => d.UtcNow).Returns(UtcNow);
1919

2020
// Arrange
21-
var cache = new ThreadSafeSlidingCache<int, string>(
21+
var cache = new SlidingCache<int, string>(
2222
TimeSpan.FromSeconds(1),
2323
dateTimeProvider: dateTimeUtilsMock.Object);
2424

@@ -48,7 +48,7 @@ public void ThreadSafeSlidingCache_TestExpire()
4848
var dateTimeUtilsMock = new Mock<IDateTimeUtils>();
4949
dateTimeUtilsMock.SetupGet(d => d.UtcNow).Returns(UtcNow);
5050

51-
var cache = new ThreadSafeSlidingCache<int, string>(TimeSpan.FromMinutes(10),
51+
var cache = new SlidingCache<int, string>(TimeSpan.FromMinutes(10),
5252
dateTimeProvider: dateTimeUtilsMock.Object);
5353

5454
// Act
@@ -70,7 +70,7 @@ public void ThreadSafeSlidingCache_TestAutoExpire()
7070
dateTimeUtilsMock.SetupGet(d => d.UtcNow).Returns(UtcNow);
7171

7272
// Arrange
73-
var cache = new ThreadSafeSlidingCache<int, string>(
73+
var cache = new SlidingCache<int, string>(
7474
TimeSpan.FromMinutes(10),
7575
dateTimeProvider: dateTimeUtilsMock.Object);
7676

@@ -99,7 +99,7 @@ public void ThreadSafeSlidingCache_TestAutoExpire()
9999
public void ThreadSafeSlidingCache_TestNull()
100100
{
101101
// Arrange
102-
var cache = new ThreadSafeSlidingCache<Expression, string>(TimeSpan.FromMinutes(10));
102+
var cache = new SlidingCache<Expression, string>(TimeSpan.FromMinutes(10));
103103

104104
// Expect an ArgumentNullException
105105
var exception = Assert.Throws<ArgumentNullException>(() => { cache.AddOrUpdate(null, "one"); });
@@ -112,7 +112,7 @@ public void ThreadSafeSlidingCache_TestMinNumberBeforeTests()
112112
dateTimeUtilsMock.SetupGet(d => d.UtcNow).Returns(UtcNow);
113113

114114
// Arrange
115-
var cache = new ThreadSafeSlidingCache<int, string>(
115+
var cache = new SlidingCache<int, string>(
116116
TimeSpan.FromMinutes(10),
117117
minCacheItemsBeforeCleanup: 2,
118118
dateTimeProvider: dateTimeUtilsMock.Object);

0 commit comments

Comments
 (0)