C#列出项目有TTL的位置

Lar*_*nal 8 c# data-structures

为了一个简单的例子,我想要一个字符串列表.列表中的每个项目应在将其添加到列表后5分钟"过期".虽然可能没有一种简单的内置方法可以做到这一点,但我想最终得到一个数据结构,其API感觉就像"正常工作".

您可以按如下方式使用它:

var now = DateTime.now();
var list = new ListWithTTL<string>();
list.add("Bob", now);
list.add("Joe", now.AddMinutes(1));
list.add("Tom", now.AddMinutes(2));
list.add("Tim", now.AddMinutes(2));
Run Code Online (Sandbox Code Playgroud)

立即检查元素会产生

["Bob", "Joe", "Tom", "Tim"]
Run Code Online (Sandbox Code Playgroud)

几分钟后它应该屈服

["Tom", "Tim"]
Run Code Online (Sandbox Code Playgroud)

最终列表应为空.

Bro*_*ass 24

您可以使用MemoryCache.NET 4中的类,它允许您在添加项目时指定TTL.

简单的例子:

MemoryCache cache = new MemoryCache("foo");
cache.Add("bar", "baz", DateTime.Now.AddSeconds(5));
var bar = cache["bar"];//returns "baz"
Thread.Sleep(TimeSpan.FromSeconds(6));
var expired = cache["bar"]; //returns null
Run Code Online (Sandbox Code Playgroud)

虽然没有直接为您提供TTL列表,但您可以根据您的解决方案进行调整,而不需要自己实现缓存过期.

  • +1 这就是我每天阅读 stackoverflow 的原因。学习东西。 (2认同)