使用Django-cachalot來緩存你的query

Katlyn14V 8年前發布 | 14K 次閱讀 Django Web框架

來自: http://python.jobbole.com/84305/

今天介紹個小工具,Django的插件—— https://github.com/BertrandBordage/django-cachalot (Django和抹香鯨?)。這個工具的主要應用場景就是自動幫你緩存你執行過的query結果,以此來幫助網站優化訪問速度。畢竟同樣查詢沒必要hit兩次甚至多次數據庫。

一個遺留的問題場景

話說很久很久之前,遇到過這樣的一個問題,當時還是在用django自帶得admin做項目,新聞的數據量很大,導致每次打開新聞的列表頁都非常慢,把Django上能用的優化都用上之后好了些,但是還是沒有徹底解決。當時貌似沒有考慮用緩存來解決,具體原因忘了,畢竟后臺項目體驗上過得去就行。

看到cachalot之后,突然就想到了這個場景,當時沒有用緩存可能是考慮數據增加很快,緩存的時間設置不好把握,也可能是其他原因。但是cachalot確實是一個值得考慮的方案。

怎么使用cachelot

上面說了些毫無營養的聯想,再來說說怎么使用,github上說的很清楚了,使用相當簡單:

Python

pip install django-cachalot

然后Django的installs_app中加入

INSTALLED_APPS = ( ... "cachalot", ... ) 即可</pre>

pipinstalldjango-cachalot
 

然后Django的installs_app中加入

  INSTALLED_APPS = (     ...     "cachalot",     ... ) 即可</pre> </div>

原理

這個項目代碼很少,做的事基本上就是給Django執行sql的那個方法: compiler.execute_sql = patch_execute_sql(compiler.execute_sql) 打個patch,大體邏輯就是,這個sql如果沒執行過就執行,然后緩存結果。 這個是正常得緩存邏輯,那么如果數據進行了更改怎么處理呢,cachalot也對執行寫數據庫的方法打了patch,在寫的時候根據語句對緩存進行刪除。

總結

Djang本身提供了三個層級的cache:整站,view,自定義。cachalot相當于提供了query層級的cache。不過這東西對于單獨的應用是有些幫助,但是對于相互依賴的多個應用就不太適用了,比如:A系統只是用來讀數據的,本身并不寫,這樣緩存始終無法更新。

寫完仔細想想,這東西貌似沒有太多的應用場景。對于小站點或許有用,比如我的博客。但博客已經添加了view層的緩存。或許可以參考cachalot來做些緩存策略上的優化。

 本文由用戶 Katlyn14V 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!