带有单个TTL的词典到期

时间:2019-04-15 00:43:59

标签: python dictionary

我需要一本字典,可以在其中存储带有TTL(生存时间)的项目,以便一旦时间到了,这些项目就会消失。我为此找到了ExpiringDict类,但它似乎仅限于字典中的每个项目都具有相同的超时。是否可以让我为每个键指定不同的超时值?

2 个答案:

答案 0 :(得分:0)

建立自己很容易。成分:用于存储值的常规dictheapq用来存储(expiry, key)对; Thread运行循环,检查堆的顶部并删除(或者标记过期,具体取决于您的需要),直到top过期(不要忘记让它进入睡眠状态)。当您按下dict时,同时将(now + ttl, key)添加到heapq。您可能需要注意一些细节(例如,如果从heapq中删除内容,则从dict中删除内容,等等,尽管那样会有些慢,因为您必须搜索堆,然后重新堆砌-同样,只有在用例需要时才需要堆砌),但基本思想很简单。

答案 1 :(得分:0)

寻找灵感的地方可能是Django的LocMemCache内存中键值对象。它基本上包装了一个_cache字典来保存实际的缓存,并包装一个_expire_info字典来存储任何到期时间。然后在get()中,它将调用self._has_expired(),并使用time.time()与当前时间戳进行比较。

您可以在django.core.cache.backends.locmem上找到课程。

当然,这不是dict的子类;如上所述,它实际上包装了两个单独的字典,一个用于缓存,另一个用于存储expires。但是,其API类似于字典。