缓存您的Django ORM查询并自动使其无效。
项目描述
缓存您的Django ORM查询并自动使其无效。
文档: http://django-cachalot.readthedocs.io
目录
快速入门
使用方法
黑客攻击
基准测试
第三方缓存比较
讨论
快速入门
Cachalot官方支持Python 3.7-3.11和Django 3.2, 4.1, 4.2, 5.0, 5.1,以及PostgreSQL, SQLite和MySQL数据库。
注意:为了您的安全,已设置Django版本的上限。请勿忽略。
使用方法
pip install django-cachalot
将'cachalot',添加到您的INSTALLED_APPS
如果您使用多个服务器与公共缓存服务器,请检查它们的时钟同步
如果您在Django外部修改数据——通常是在恢复SQL数据库之后——请使用manage.py命令
请注意以下少数其他限制。
如果您使用django-debug-toolbar,可以将'cachalot.panels.CachalotPanel',添加到您的DEBUG_TOOLBAR_PANELS
祝您使用愉快!
黑客攻击
要开始开发,请安装依赖项并通过tox运行测试。
请确保您有以下服务
Memcached
Redis
PostgreSQL
MySQL
设置
安装: pip install -r requirements/hacking.txt
对于PostgreSQL: CREATE ROLE cachalot LOGIN SUPERUSER;
运行: tox --current-env 以在当前Python版本上运行测试套件。
您还可以运行特定的数据库和Django版本: tox -e py38-django3.1-postgresql-redis
基准测试
目前,基准测试支持在Linux和Mac/Darwin上运行。您需要在MySQL和PostgreSQL上有一个名为“cachalot”的数据库。此外,在PostgreSQL上,您需要创建一个名为“cachalot”的角色。您还可以运行基准测试,如果出现问题,它将提供具体的修复说明。
安装: pip install -r requirements/benchmark.txt
运行: python benchmark.py
输出将保存在benchmark/TODAY’S_DATE/
待办事项:创建Docker-compose文件,以便更容易运行数据。
第三方缓存比较
有三个主要的第三方缓存:cachalot、cache-machine和cache-ops。您使用哪一个?我们建议混合使用。
TL;DR:对于每分钟修改少于50次的冷或修改的记录(大多数人应该只使用cachalot,因为您很可能不需要扩展到需要添加cache-machine的程度)。如果您是企业,已经有大量统计数据,那么cachalot和您的热缓存cache-machine混合使用是最佳组合。然而,在执行使用select_related和prefetch_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这里。
旧版聊天
项目详情
下载文件
下载适用于您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。