django 缓存cache配置注意事项
程序员文章站
2022-03-08 14:07:33
...
最近在个人项目优化的过程中,发现自己重新踩了一下缓存配置的坑,转念一想索性在博客上留存一份资料以备日后随时反查,也给各位正在学习或使用django的朋友提个醒。
配置缓存CACHES
关于配置这块,目前百度Google差不多都清一色的是复制粘贴呢,就没有人发现有时候settings里面根本没有CACHES这个配置么?搞得很多刚学习的小伙伴找半天都不知道可以自己创建。。。没错!如果你在settings里面没发现CACHES的配置信息,是要自己创建的。
目前django支持6种类型的缓存方式:
- 开发测试(默认)
- 文件
- 内存
- 数据库
- memcache缓存(分为python-memcache模块和pylibmc模块两种方式)
- redis(需要额外pip install django-redis)
开发测试模式配置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎
'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期)
'OPTIONS':{
'MAX_ENTRIES': 300, # 最大缓存个数(默认300)
'CULL_FREQUENCY': 3,
# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
},
'KEY_PREFIX': '', # 缓存key的前缀(默认空)
'VERSION': 1, # 缓存key的版本(默认1)
'KEY_FUNCTION' 函数名 # 生成key的函数(默认生成 前缀:版本:key)
}
}
内存模式:
注意:其实不同模式要更改的只是引擎,其他设置如“TIMEOUT”、“OPTION”等都是通用的!!所以下面只给出变更的部分!!
'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',
#这里给出的是路径,但是更多时候是在项目根目录创建个文件夹,然后直接
os.path.join(BASE_DIR,‘文件夹名称’)
}
}
数据库:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 要先创建个数据库表才能指定路径
}
}
Memcache缓存:
python-memcache模块:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
#可以添加多个地址,也可以只添加一个
]
}
}
或:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
pylibmc模块:
用法和上面一样,只是引擎换了:
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
redis缓存:
pip install django-redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
}
}
}
使用方法:因为redis不是django内置支持的,所以使用方法略不同:
在views.py中:
from django_redis import get_redis_connection
conn = get_redis_connection("default")
使用缓存:
一、全局使用(利用中间件):
由于中间件有固定的顺序执行,所以我们始终在获得最终的请求或返回处设置缓存。
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
#在返回的response中加入到缓存
# 其他中间件...
'django.middleware.cache.FetchFromCacheMiddleware',
#在接收到的request请求中加入到缓存
]
CACHE_MIDDLEWARE_ALIAS = ""
CACHE_MIDDLEWARE_SECONDS = ""
CACHE_MIDDLEWARE_KEY_PREFIX = ""
二、单独在views中使用:
from django.views.decorators.cache import cache_page
@cache_page(100) #100表示的是缓存失效时间
def index(request):
三、在局部模板中使用:
你也可以直接在自己的前端页面中插入:
{% load cache %}
#要在页码顶部先引入
{% cache 100 k1 %} #100是失效时间,k1是缓存的key
缓存内容
{% endcache %}
PS:
你当然可以直接在urls.py里设置缓存,但是这会让url对应视图的代码显得臃肿,个人不太建议这样做:
from django.views.decorators.cache import cache_page
urlpatterns = [
url(r'^foo/([0-9]{1,2})/$', cache_page(100)(my_view)),
]
上一篇: MSN Messenger迎来10岁生日
下一篇: 七、4.字符串(strings)