使用Django-cachalot来缓存你的query,,这个工具的主要应用场景就
使用Django-cachalot来缓存你的query,,这个工具的主要应用场景就
今天介绍个小工具,Django的插件—— https://github.com/BertrandBordage/django-cachalot (Django和抹香鲸?)。这个工具的主要应用场景就是自动帮你缓存你执行过的query结果,以此来帮助网站优化访问速度。毕竟同样查询没必要hit两次甚至多次数据库。
一个遗留的问题场景
话说很久很久之前,遇到过这样的一个问题,当时还是在用django自带得admin做项目,新闻的数据量很大,导致每次打开新闻的列表页都非常慢,把Django上能用的优化都用上之后好了些,但是还是没有彻底解决。当时貌似没有考虑用缓存来解决,具体原因忘了,毕竟后台项目体验上过得去就行。
看到cachalot之后,突然就想到了这个场景,当时没有用缓存可能是考虑数据增加很快,缓存的时间设置不好把握,也可能是其他原因。但是cachalot确实是一个值得考虑的方案。
怎么使用cachelot
上面说了些毫无营养的联想,再来说说怎么使用,github上说的很清楚了,使用相当简单:
Pythonpip install django-cachalot #然后Django的installs_app中加入 INSTALLED_APPS = ( ... "cachalot", ... ) 即可
原理
这个项目代码很少,做的事基本上就是给Django执行sql的那个方法: compiler.execute_sql = patch_execute_sql(compiler.execute_sql) 打个patch,大体逻辑就是,这个sql如果没执行过就执行,然后缓存结果。 这个是正常得缓存逻辑,那么如果数据进行了更改怎么处理呢,cachalot也对执行写数据库的方法打了patch,在写的时候根据语句对缓存进行删除。
总结
Djang本身提供了三个层级的cache:整站,view,自定义。cachalot相当于提供了query层级的cache。不过这东西对于单独的应用是有些帮助,但是对于相互依赖的多个应用就不太适用了,比如:A系统只是用来读数据的,本身并不写,这样缓存始终无法更新。
写完仔细想想,这东西貌似没有太多的应用场景。对于小站点或许有用,比如我的博客。但博客已经添加了view层的缓存。或许可以参考cachalot来做些缓存策略上的优化。
相关内容
- Django权限机制的实现,django权限机制, 1. Django权限
- “海盗”用Flask,“海军”用Django,flaskdjango,未经许可
- 在Django中实现一个高性能未读消息计数器,django计数器
- 一套关于Django的笔试题,Django笔试题, 这套题我觉得出
- Django任意代码执行漏洞分析,django代码漏洞,采用了MV
- 不停机条件下部署 Django 应用,部署django,未经许可,禁
- Django项目该如何布局?我推荐这样做,django项目,未经许
- Flask、Django、Pyramid三个框架的对比,flaskdjango,未经许可
- Django运行方式及处理流程总结,django运行流程总结,所以
- 简约而不简单的Django新手图文教程,django新手图文, 环
评论关闭