Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
注意:本文是一个存根。稍会将发布有关不同的简单缓存实现的更详细分析。请参阅下面的注解获得大致的摘要。
以下是一个简单的缓存实现,适用于相对较小的缓存(最多几百个项目),并且在缓存未命中(例如每个对象几毫秒或更多)后创建或重新加载对象的成本相对较高。
简单缓存实现
用法:
注意,该实现使用普通列表来跟踪访问顺序,以便能够在缓存填满时丢弃最近最少使用的项目。列表类型没有真正为此目的而优化,但是这种方法对于较小的缓存非常有效,特别是当缓存访问遵循80/20模式时。
_________________________________________________________________________________________________________________
注释:
(100k访问,100时隙,500项,10ms对象
创建,每个对象1k,整数键)
基线:速度= 1000s(0 + 1000)内存= 0k
memoization: speed=5.22s (0.22+5.00) memory=500k
keep last: speed=989.86s (0.72+989.14) memory=1k
clear all: speed=532.51s (0.55+531.96) memory=100k
clear pop: speed=706.51s (0.76+705.75) memory=100k
clear random: speed=400.61s (0.80+399.81) memory=100k
clear lru: speed=317.05s (0.78+316.27) memory=100k
替代实现:
carlson: speed=320.22s (1.35+318.87) memory=100k
prodromou: speed=343.61s (17.88+325.73) memory=100k
http://freshmeat.net/projects/lrucache/
carlson 的实现方式是使用手动维护的双 - 链表,复杂度是O(1),对于较小的缓存比列表慢。
prodromou 的实现使用一个排序堆缓存项目,结果是慢得多。
英文原文:http://effbot.org/zone/caching.htm
译者:奇迹