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

作者:goldensun 时间:2022-01-16 13:02:39 

数据库缓存

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


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包含的缓存后端。 它们经过大量测试,并且易于使用。

标签:Django,缓存
0
投稿

猜你喜欢

  • Windows下Anaconda下载安装与配置教程分享

    2023-09-29 22:37:11
  • 解读ASP.NET 5 & MVC6系列教程(9):日志框架

    2023-06-30 06:10:57
  • python 合并文件的具体实例

    2022-03-12 03:18:26
  • Python编程学习之如何判断3个数的大小

    2022-03-06 18:10:04
  • python两个list[]相加的实现方法

    2023-09-22 13:34:52
  • 流动的线条 —— 中国汉字书法之美

    2009-10-30 18:15:00
  • Python中range函数的使用方法

    2022-02-07 12:54:12
  • php防止sql注入示例分析和几种常见攻击正则表达式

    2023-11-23 17:01:02
  • 怎样生成utf-8编码的html文件

    2009-03-11 19:34:00
  • 修改、删除数据记录(DELETE\\UPDATE)

    2009-02-27 15:50:00
  • python2爬取百度贴吧指定关键字和图片代码实例

    2022-10-12 09:03:44
  • 如何用定值 Cookie 实现反爬详解

    2023-11-15 23:32:18
  • sql server 触发器实例代码

    2012-01-05 19:09:28
  • Python 实现引用其他.py文件中的类和类的方法

    2023-08-02 10:38:01
  • Excel数据导入到Access,Sql Server中示例代码

    2007-10-07 12:03:00
  • pytorch geometric的GNN、GCN的节点分类方式

    2022-12-24 16:01:23
  • 一段有趣的js代码的研究

    2008-04-29 21:47:00
  • Go程序性能优化及pprof使用方法详解

    2023-08-28 14:04:40
  • python实现图像高斯金字塔的示例代码

    2023-05-06 02:02:32
  • php完全过滤HTML,JS,CSS等标签

    2023-10-09 08:07:34
  • asp之家 网络编程 m.aspxhome.com