-
Notifications
You must be signed in to change notification settings - Fork 34
ConcurrentTLru
Alex Peck edited this page Aug 13, 2021
·
17 revisions
ConcurrentTLru is a thread-safe bounded size pseudo TLRU, items have TTL. This page describes how to use the ConcurrentTLru.
ConcurrentTLru is intended to be a drop in replacement for ConcurrentDictionary, but with the benefit of bounded size based on an LRU eviction policy and TTL.
This code sample illustrates how to create an LRU then get/remove/update items:
int capacity = 666;
TimeSpan ttl = TimeSpan.FromMinutes(5);
var lru = new ConcurrentTLru<int, SomeItem>(capacity, ttl);
// Get
bool success1 = lru.TryGet(1, out var value);
var value1 = lru.GetOrAdd(1, (k) => new SomeItem(k));
var value2 = await lru.GetOrAddAsync(0, (k) => Task.FromResult(new SomeItem(k)));
// Remove
bool success2 = lru.TryRemove(1);
// Update
var item = new SomeItem(1);
bool success3 = lru.TryUpdate(1, item);
lru.AddOrUpdate(1, item);