前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Django-cachalot 来缓存你的 query

使用 Django-cachalot 来缓存你的 query

作者头像
the5fire
发布2019-03-01 10:57:30
7860
发布2019-03-01 10:57:30
举报

今天介绍个小工具,Django的插件—— https://github.com/BertrandBordage/django-cachalot (Django和抹香鲸?)。这个工具的主要应用场景就是自动帮你缓存你执行过的query结果,以此来帮助网站优化访问速度。毕竟同样查询没必要hit两次甚至多次数据库。

一个遗留的问题场景

话说很久很久之前,遇到过这样的一个问题,当时还是在用django自带得admin做项目,新闻的数据量很大,导致每次打开新闻的列表页都非常慢,把Django上能用的优化都用上之后好了些,但是还是没有彻底解决。当时貌似没有考虑用缓存来解决,具体原因忘了,毕竟后台项目体验上过得去就行。

看到cachalot之后,突然就想到了这个场景,当时没有用缓存可能是考虑数据增加很快,缓存的时间设置不好把握,也可能是其他原因。但是cachalot确实是一个值得考虑的方案。

怎么使用cachelot

上面说了些毫无营养的联想,再来说说怎么使用,github上说的很清楚了,使用相当简单:

代码语言:javascript
复制
pip 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来做些缓存策略上的优化。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一个遗留的问题场景
  • 怎么使用cachelot
  • 原理
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档