我有以下困境,实施LRU算法。 对于我必须存储的每个条目(键,值,时间戳) 正如您猜测的那样,缓存结构可以是:
cache[key] = [ value, tstamp ]
到目前为止一切顺利。问题是LRU算法需要这样
当我必须清除元素(因为缓存已满)时,我必须这样做
线性搜索时间戳以删除最少使用的项目,这很慢。
另一方面,我无法构建反向哈希tstamp =>关键,因为 key是1KByte大,额外的内存使用将否定缓存的使用。
保留速度但不增加内存使用量的任何想法?
如果我可以提供一些参考资料,我可能会引用缓存密钥而无需分配额外的内存!
我无法使用LRU lib,因为默认情况下密钥是不可用的,我必须事先对其进行转换。我也使用2.7
答案 0 :(得分:0)
如果您想使用开箱即用的LRU缓存,请参阅functools.lru_cache
如果您需要自己实施,请使用链接列表来跟踪功能调用历史记录,请参阅my other answer关于functools.lru_cache
内部工作方式的问题。