Skip to content

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.

Usage

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);