Django缓存配置的六种方式详解

巷口听风
巷口听风
发布时间:2026-10-13 | 6人浏览过
原创

本文详细介绍Django中缓存配置的六种方式,涵盖开发调试、内存、文件、数据库以及基于python-memcached和pylibmc模块的Memcache方案。通过具体配置示例,解析如何根据实时性需求和服务器环境选择合适的缓存策略,提升动态网站访问性能。

为什么要使用缓存?

Django作为动态网站框架,每次请求都会执行数据库操作。当访问量增大时,响应时间会显著增加。最简单的优化手段是使用缓存机制:将视图函数的返回值存储到内存或Memcache中。在设定的时间窗口内(如5分钟),后续相同请求无需再次执行视图逻辑,而是直接返回缓存内容。

缓存是一个广义概念,其介质通常是高速内存,也可以是其他能加速数据读取的技术方案。

何时适合使用缓存?

适用于对页面实时性要求不高的场景。例如博客文章,若用户每天仅更新一篇,可设置1天的缓存周期,到期后自动刷新。对于电商网站,商品描述信息通常固定不变,适合长期缓存;但库存数量需随购买实时变动,因此需结合特定的缓存策略,确保关键数据的一致性。

缓存的配置方法

Django提供了6种不同的缓存后端配置方式。

  • 开发调试模式
  • 内存缓存
  • 文件缓存
  • 数据库缓存
  • Memcache缓存(使用python-memcached模块)
  • Memcache缓存(使用pylibmc模块)

开发调试模式配置说明:

此模式主要用于开发调试阶段,内部不执行实际的缓存存储操作。

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎
  'TIMEOUT': 300,            # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,          # 最大缓存个数(默认300)
   'CULL_FREQUENCY': 3,          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3),3:表示1/3
  },
  #这边只的是缓存的key:p1:1:func_name
  'KEY_PREFIX': 'p1',            # 缓存key的前缀(默认空)
  'VERSION': 1,             # 缓存key的版本(默认1)
  'KEY_FUNCTION':"func_name"         # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
 }
}其他除了引擎不一样,其他的都是通用的,这边只的是缓存的key:p1:1:func_name的源码如下:所以我们就可以自定义这个key的格式。
# 自定义key
 def default_key_func(key, key_prefix, version):
  """
  Default function to generate keys.

  Constructs the key used by all other methods. By default it prepends
  the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
  function with custom key making behavior.
  """
  return '%s:%s:%s' % (key_prefix, version, key)

 def get_key_func(key_func):
  """
  Function to decide which key function to use.

  Defaults to ``default_key_func``.
  """
  if key_func is not None:
   if callable(key_func):
    return key_func
   else:
    return import_string(key_func)
  return default_key_func

内存缓存配置说明:

注意LOCATION需指定绝对路径(从根目录开始),并确保服务器对该路径拥有读写权限。

# 'LOCATION': 'c:\foo\bar', # Windows系统下的路径示例

在内存缓存模式下,必须设置一个唯一的LOCATION值。该值作为标识,将内容保存至内存变量中。

CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
   'LOCATION': 'unique-snowflake', #这边必须设置一个值,这个值是唯一的
  }
 #其他的配置和开发调试版本一样
}

文件缓存说明:此方式将缓存内容持久化保存到指定文件中。

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
  'LOCATION': '/var/tmp/django_cache', #缓存存放的路径<br data-filtered="filtered">    
 }
 #其他的配置和开发调试版本一样
}

数据库缓存说明:此方式将缓存数据存储到数据库指定的表中。

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
  'LOCATION': 'my_cache_table', # 设置一个数据库存放缓存的表名
 }
 #其他的配置和开发调试版本一样
}

# 注:执行创建表命令 python manage.py createcachetable

Memcache缓存(python-memcached模块)配置说明:

此配置通过python-memcached模块连接Memcache服务器。

#单台机器
CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
   'LOCATION': '127.0.0.1:11211',
  }
  #其他的配置和开发调试版本一样
}
 
#存放本地的
CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  'LOCATION': 'unix:/tmp/memcached.sock',
 }
 #其他的配置和开发调试版本一样
} 
 
#支持集群,负载均衡
CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  'LOCATION': [
   '172.19.26.240:11211',
   '172.19.26.242:11211',
   #设置权重
   #('172.19.26.240:11211',10),
   #('172.19.26.242:11211',20),
  ] 
 }
 #其他的配置和开发调试版本一样
}

Memcache缓存(pylibmc模块)配置说明:

此配置通过pylibmc模块连接Memcache服务器。

# 此缓存使用pylibmc模块连接memcache
  
 CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
   'LOCATION': '127.0.0.1:11211',
  }
 }
 
 CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
   'LOCATION': '/tmp/memcached.sock',
  }
 } 
 
 CACHES = {
  'default': {
   'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
   'LOCATION': [
    '172.19.26.240:11211',
    '172.19.26.242:11211',
   ]
  }
 }

总结

以上内容涵盖了Django缓存配置的主要方式,希望能为读者在学习或工作中提供参考。如有疑问,欢迎留言交流,感谢支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表