python实现缓存_Python实现缓存

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

译者:奇迹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值