Django使用redis实现缓存
Posted zhuangshenhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django使用redis实现缓存相关的知识,希望对你有一定的参考价值。
1. 安装
pip3 install django-redis
2. 配置(settings.py文件)
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", # 引擎
"TIMEOUT": 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期
"LOCATION": "redis://127.0.0.1:6379/1", # 1表是代表那个库 "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "PASSWORD": "mysecret", # 密码 "CONNECTION_POOL_KWARGS": {"max_connections": 100} # 连接池最大连接数 } } }
注意: 在settings.py配置完后执行 python manage.py createcachetable
3. 缓存种类
3.1views视图缓存
# 视图缓存 from django.shortcuts import render from django.views.decorators.cache import cache_page from cache.models import Foo # 在需要缓存的视图上添加装饰器, 参数是设置timeout 超时时间, 单位是秒, @cache_page(60) def index(request): bar = Foo.objects.all() return render(request, ‘cache/index.html‘, {‘bar‘: bar})
3.2模板缓存
步骤I. 引入TemplateTag {% load cache %} 步骤II. 使用缓存 {% cache 5000 缓存key %} 缓存内容 {% endcache %}
{% load cache %}
{% cache 500 ‘cache_name‘ %}
<div>container</div>
{% endcache %}
3.3站点缓存(缓存整个网站)
MIDDLEWARE = [ # 站点缓存 , 注意必须在第一个位置 ‘django.middleware.cache.UpdateCacheMiddleware‘, # ... # 站点缓存, 注意必须在最后一个位置 ‘django.middleware.cache.FetchFromCacheMiddleware‘, ]
具体操作
配置: # 缓存配置 CACHES = { "default": { # 引擎 "BACKEND": "django_redis.cache.RedisCache", # 缓存超时时间(默认300,None表示永不过期,0表示立即过期) ‘TIMEOUT‘: 300, "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", # "PASSWORD": "mysecret" } } } 路由: # 缓存测试 url(r‘^cache1/$‘, views.cache1,name="cache1"), url(r‘^cache2/$‘, views.cache2,name="cache2"), 视图: import datetime from django.views.decorators.cache import cache_page from django.core.cache import cache # 缓存整个视图函数 @cache_page(10) def cache1(request): t = datetime.datetime.now() return HttpResponse(t) # 在视图函数中缓存一部分内容 def cache2(request): # 判断缓存是否存在数据 a = cache.get(‘time‘,None) if a: print(‘缓存中存在数据‘) print(a) else: # 从模型中获取的数据 a = datetime.datetime.now() cache.set(‘time‘,a,10) print(‘缓存中,不存在数据,查询并缓存‘) print(a) # 不需要缓存的数据 t = datetime.datetime.now() print(t) return HttpResponse(t)
以上是关于Django使用redis实现缓存的主要内容,如果未能解决你的问题,请参考以下文章
学习猿地 python教程 django教程9 Django使用redis实现缓存
Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
django-redis-cache 和 django-redis 用于使用 Django 进行 redis 缓存的区别?