Django缓存配置的六种方式详解
本文详细介绍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缓存配置的主要方式,希望能为读者在学习或工作中提供参考。如有疑问,欢迎留言交流,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









