首页 > 解决方案 > 具有单个 TTL 的过期字典

问题描述

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

标签: pythondictionary

解决方案


建立自己很容易。成分:一个正常dict的存储值;aheapq存储(expiry, key)对;aThread运行循环,检查堆顶部并删除(或标记过期,取决于您的需要),而顶部的过期时间已经过去(不要忘记让它休眠)。当你推到dict时,同时添加(now + ttl, key)heapq。您可能需要注意一些细节(例如,heapq如果您从中删除dict等,则删除内容,尽管这会有点慢,因为您必须搜索堆,然后重新堆化 - 再次,仅当您的用例需要它)但基本思想非常简单。


推荐阅读