简介Django框架中可使用的各类缓存


Posted in Python onJuly 23, 2015

数据库缓存

为了使用数据库表作为缓存后端,首先在数据库中运行这个命令以创建缓存表:

python manage.py createcachetable [cache_table_name]

这里的[cache_table_name]是要创建的数据库表名。 (这个名字随你的便,只要它是一个有效的表名,而且不是已经在您的数据库中使用的表名。)这个命令以Django的数据库缓存系统所期望的格式创建一个表。

一旦你创建了数据库表,把你的CACHE_BACKEND设置为”db://tablename”,这里的tablename是数据库表的名字,在这个例子中,缓存表名为my_cache_table: 在这个例子中,高速缓存表的名字是my_cache_table:

CACHE_BACKEND = 'db://my_cache_table'

数据库缓存后端使用你的settings文件指定的同一数据库。 你不能为你的缓存表使用不同的数据库后端.

如果你已经有了一个快速,良好的索引数据库服务器,那么数据库缓存的效果最明显。
文件系统缓存

要把缓存项目放在文件系统上,请为CACHE_BACKEND使用”file://“的缓存类型。例如,要把缓存数据存储在/var/tmp/django_cache上,请使用此设置:

CACHE_BACKEND = 'file:///var/tmp/django_cache'

注意例子中开头有三个斜线。 头两项是file://,第三个是第一个字符的目录路径,/var/tmp/django_cache。如果你使用的是Windows,在file://之后加上文件的驱动器号:

file://c:/foo/bar

目录路径应该是*绝对*路径,即应该以你的文件系统的根开始。 在设置的结尾放置斜线与否无关紧要。

确认该设置指向的目录存在并且你的Web服务器运行的系统的用户可以读写该目录。 继续上面的例子,如果你的服务器以用户apache运行,确认/var/tmp/django_cache存在并且用户apache可以读写/var/tmp/django_cache目录。

每个缓存值将被存储为单独的文件,其内容是Python的pickle模块以序列化(“pickled”)形式保存的缓存数据。 每个文件的名称是缓存键,以规避开安全文件系统的使用。
本地内存缓存

如果你想利用内存缓存的速度优势,但又不能使用Memcached,可以考虑使用本地存储器缓存后端。 此缓存的多进程和线程安全。 设置 CACHE_BACKEND 为 locmem:/// 来使用它,例如:

CACHE_BACKEND = 'locmem:///'

请注意,每个进程都有自己私有的缓存实例,这意味着跨进程缓存是不可能的。 这显然也意味着本地内存缓存效率并不是特别高,所以对产品环境来说它可能不是一个好选择。 对开发来说还不错。
仿缓存(供开发时使用)

最后,Django提供了一个假缓存(只是实现了缓存接口,实际上什么都不做)。

假如你有一个产品站点,在许多地方使用高度缓存,但在开发/测试环境中,你不想缓存,也不想改变代码,这就非常有用了。 要激活虚拟缓存,就像这样设置CACHE_BACKEND:

CACHE_BACKEND = 'dummy:///'

使用自定义缓存后端

尽管Django包含对许多缓存后端的支持,在某些情况下,你仍然想使用自定义缓存后端。 要让Django使用外部缓存后端,需要使用一个Python import路径作为的CACHE_BACKEND URI的(第一个冒号前的部分),像这样:

CACHE_BACKEND = 'path.to.backend://'

如果您构建自己的后端,你可以参考标准缓存后端的实现。 源代码在Django的代码目录的django/core/cache/backends/下。

注意 如果没有一个真正令人信服的理由,比如主机不支持,你就应该坚持使用Django包含的缓存后端。 它们经过大量测试,并且易于使用。

Python 相关文章推荐
进一步探究Python的装饰器的运用
May 05 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
分数霸榜! python助你微信跳一跳拿高分
Jan 08 Python
Sanic框架流式传输操作示例
Jul 18 Python
python使用knn实现特征向量分类
Dec 26 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
jupyter notebook实现显示行号
Apr 13 Python
Python基于gevent实现高并发代码实例
May 15 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
浅析Python的Django框架中的Memcached
Jul 23 #Python
详解Django中的权限和组以及消息
Jul 23 #Python
在Django的模板中使用认证数据的方法
Jul 23 #Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 #Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 #Python
在Django中限制已登录用户的访问的方法
Jul 23 #Python
详解Django框架中用户的登录和退出的实现
Jul 23 #Python
You might like
PHP引用符&的用法详细解析
2013/08/22 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
PHP7 list() 函数修改
2021/03/09 PHP
javascript 模拟点击广告
2010/01/02 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
JS实现继承的几种常用方式示例
2019/06/22 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Python函数生成器原理及使用详解
2020/03/12 Python
大专生的学习自我评价
2013/12/04 职场文书
小学端午节活动方案
2014/03/13 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
离婚案件被告代理词
2015/05/23 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书