Django更智能的本地内存缓存后端

django-lrucache-backend的Python项目详细描述


Latest PyPI versionLatest Travis CI build status

一个更智能的Django本地内存缓存后端。

Cache Performance

Set PerformanceDelete 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

要求

lru dict在c中实现,不太可能与非cpython一起工作 实现。这里有兼容的纯python库。如果你需要这个 能力,请打开一个问题!

用法

适当配置缓存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,但不再测试。

许可证

麻省理工学院

作者

django lrucache backend由Josh Smeaton编写。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JetXcel在关闭可写工作簿之前修改多个单元格   java saveMyProfile计算false 2次   java在安卓系统中如何在长时间内让现在和时间变得不同   java生成大小写字母   java set MainClass标头,带有来自mainClassName的渐变   java无法仅为此网站拖放selenium   java如何使HttpURLConnection从servlet响应中获取标头?   java如何将cachecontrol添加到@RestController servlet路径?   java如何在jasper report中调用实体方法?   java中的“<<”运算符   java在Android应用程序中添加按位置搜索功能   使用<%@page isaligned=“false”%%时,java静态属性必须是字符串文字