Django更智能的本地内存缓存后端
django-lrucache-backend的Python项目详细描述
一个更智能的Django本地内存缓存后端。
Set Performance。Delete performance。
关于
<> > LRUCACEHEB后端< /CIT>是一个改进现有内存的内存缓存。 django提供的locmemcache。带有缓存超时和一个更倾向于保留的智能逐出策略 经常使用的密钥,并逐出不经常使用的密钥。
最初的开发是为了避免对 服务层对象。例如:
defget_data_before(self):ifnothasattr(self,'__data'):self.__data=self.expensive_query()returnself.__datadefget_data_after(self):lcache=caches['local']data=lcache.get('our_data')ifnotdata:data=self.expensive_query()lcache.set('our_data',data,timeout=600)returndata
好处(尽管方法较长)包括超时,在 请求,并避免网络请求。这在那里特别有用 是数百或数千个属性访问,这些访问将命中缓存中 网络开销将令人望而却步。脂肪模型 从分层缓存中获益。
对吗?
内存中的缓存对于很少更改的小数据很好。很有效 在同一进程中的请求之间共享的全局字典。小查找 表和数据库支持的设置是很好的候选者。
应使用少量的键以避免采用剔除策略 在缓存中。只要最大数量的按键,性能就会快速下降。 到达时,密钥开始逐出。
这应该不用作主缓存,但它使 当您想要避免网络调用的开销时,最好的二级缓存。
用于:
- 小查找表
- 设置
- 为您的服务对象备份存储
- 在请求或芹菜任务期间记住值
- 小的全局模板片段,如边栏或页脚
- 辅助缓存
不好吗?
内存中的缓存对于经常更改的数据来说非常糟糕。因为缓存 如果进程是本地的,很难协调缓存失效 来自外部流程。因此,这个库不支持 缓存失效。
缓存与应用程序共享内存,因此 避免存储大量密钥或任何大值。
不要用于:
- 实例属性
- 完整模板
- 具有大量行的表
- 大值
- 大列表
- 主缓存
与locmemcache的区别
- 避免腌渍
- 避免密钥名验证
- 使用lru逐出算法而不是随机百分比剔除策略
安装
pip install django-lrucache-backend
用法
适当配置缓存django设置:
CACHES={'local':{'BACKEND':'lrucache_backend.LRUObjectCache','TIMEOUT':600,'OPTIONS':{'MAX_ENTRIES':100},'NAME':'optional-name'}}
然后像使用其他缓存一样使用缓存:
>>>fromdjango.core.cacheimportcaches>>>local=caches['local']>>>local.set('key',123)>>>local.get('key')...123
如果要使用此缓存后端,则强烈建议使用 它作为非默认缓存。也就是说,不要在 默认值名称。
本地内存缓存与应用程序竞争内存,因此它位于 最大的利益是尽可能谨慎地使用它。
兼容性
Django 1.11-Django 2.2。 对于django 1.11,python支持为2.7;对于django,python支持为3.6+>;=2.0。 python 3.4-3.5可能适用于django<;2.1,但不再测试。
许可证
麻省理工学院