跳转到主要内容

缓存您的Django ORM查询并自动使其无效。

项目描述

缓存您的Django ORM查询并自动使其无效。

文档: http://django-cachalot.readthedocs.io


http://img.shields.io/pypi/v/django-cachalot.svg?style=flat-square&maxAge=3600 https://img.shields.io/pypi/pyversions/django-cachalot https://github.com/noripyt/django-cachalot/actions/workflows/ci.yml/badge.svg http://img.shields.io/coveralls/noripyt/django-cachalot/master.svg?style=flat-square&maxAge=3600 http://img.shields.io/scrutinizer/g/noripyt/django-cachalot/master.svg?style=flat-square&maxAge=3600 https://img.shields.io/discord/773656139207802881

目录

  • 快速入门

  • 使用方法

  • 黑客攻击

  • 基准测试

  • 第三方缓存比较

  • 讨论

快速入门

Cachalot官方支持Python 3.7-3.11和Django 3.2, 4.1, 4.2, 5.0, 5.1,以及PostgreSQL, SQLite和MySQL数据库。

注意:为了您的安全,已设置Django版本的上限。请勿忽略。

使用方法

  1. pip install django-cachalot

  2. 'cachalot',添加到您的INSTALLED_APPS

  3. 如果您使用多个服务器与公共缓存服务器,请检查它们的时钟同步

  4. 如果您在Django外部修改数据——通常是在恢复SQL数据库之后——请使用manage.py命令

  5. 请注意以下少数其他限制

  6. 如果您使用django-debug-toolbar,可以将'cachalot.panels.CachalotPanel',添加到您的DEBUG_TOOLBAR_PANELS

  7. 祝您使用愉快!

黑客攻击

要开始开发,请安装依赖项并通过tox运行测试。

请确保您有以下服务

  • Memcached

  • Redis

  • PostgreSQL

  • MySQL

设置

  1. 安装: pip install -r requirements/hacking.txt

  2. 对于PostgreSQL: CREATE ROLE cachalot LOGIN SUPERUSER;

  3. 运行: tox --current-env 以在当前Python版本上运行测试套件。

  4. 您还可以运行特定的数据库和Django版本: tox -e py38-django3.1-postgresql-redis

基准测试

目前,基准测试支持在Linux和Mac/Darwin上运行。您需要在MySQL和PostgreSQL上有一个名为“cachalot”的数据库。此外,在PostgreSQL上,您需要创建一个名为“cachalot”的角色。您还可以运行基准测试,如果出现问题,它将提供具体的修复说明。

  1. 安装: pip install -r requirements/benchmark.txt

  2. 运行: python benchmark.py

输出将保存在benchmark/TODAY’S_DATE/

待办事项:创建Docker-compose文件,以便更容易运行数据。

第三方缓存比较

有三个主要的第三方缓存:cachalot、cache-machine和cache-ops。您使用哪一个?我们建议混合使用。

TL;DR:对于每分钟修改少于50次的冷或修改的记录(大多数人应该只使用cachalot,因为您很可能不需要扩展到需要添加cache-machine的程度)。如果您是企业,已经有大量统计数据,那么cachalot和您的热缓存cache-machine混合使用是最佳组合。然而,在执行使用select_relatedprefetch_related的连接操作时,您可以在初始部署中获得近100倍的速度提升。

回想一下,cachalot缓存的是整个表。这就是其低效的原因:如果您持续更新记录,则cachalot会不断使表失效并重新缓存。幸运的是,缓存效率很高,只是缓存失效部分让我们的系统不堪重负。请参阅下面的第1条注释,了解Reddit是如何处理的。

cachalot主要用于冷缓存或“恰到好处”的条件。如果您找到Django的分区库(也由Andrew Chen Wang编写,但仍在开发中),则缓存将工作得更好,因为将冷/最少访问的记录进行分区,不会像cachalot那样频繁地使缓存失效。

当热缓存表每分钟修改少于50次时,cachalot表现良好。这主要归因于缓存失效。任何缓存都是如此,这就是我们建议您使用cache-machine进行热缓存的原因。cache-machine缓存单个对象,在内存存储中占用更多空间,但只使这些单个对象失效,而不是像cachalot那样使整个表失效。

是的,我们整个存在的主要问题是缓存失效和变量命名。为什么当遇到一个快速修改的大量表时,cachalot会变得糟糕?因为您已经混合了冷(90%)和热(10%)记录,您正在缓存和使整个表失效。这就像在一只大锅里煮1吨面条,而不是在100只小锅里煮1吨面条。哪个更有效率?把它们分开。

第1条注释:我个人的缓存经验来自于Reddit的:https://web.archive.org/web/20210803213621/https://redditblog.com/2017/01/17/caching-at-reddit/

注意2:技术比较:https://django-cachalot.readthedocs.io/zh/latest/introduction.html#comparison-with-similar-tools

讨论

需要帮助?技术聊天?在Discord这里

旧版聊天

https://raw.github.com/noripyt/django-cachalot/master/django-cachalot.jpg

项目详情


下载文件

下载适用于您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源代码分发

django_cachalot-2.6.3.tar.gz (73.7 kB 查看散列)

上传时间 源代码

构建分发

django_cachalot-2.6.3-py3-none-any.whl (55.2 kB 查看散列)

上传时间 Python 3

支持者: