我需要一本字典,可以在其中存储带有TTL(生存时间)的项目,以便一旦时间到了,这些项目就会消失。我为此找到了ExpiringDict类,但它似乎仅限于字典中的每个项目都具有相同的超时。是否可以让我为每个键指定不同的超时值?
答案 0 :(得分:0)
建立自己很容易。成分:用于存储值的常规dict
; heapq
用来存储(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类似于字典。