不加REDIS缓存时,每次访问都要读取数据库,当访问量非常大的时候, 就会有很多次的数据库查询,会造成访问速度变慢,服务器资源占用较多等问题。
当使用了缓存后,访问情况变成了如下:访问一个网址时, 尝试从 cache 中找有没有,如果需要的数据在缓存中没有,则去数据库取,渲染返回页面,同时将这些数据保存在缓存中,在一定时间内,当用户再次访问页面时,就没必要去数据库取了,直接从缓存中拿到数据。缓存放在内存中,读写速度快。
安装
windows下安装redis
在windows下安装redis。
https://github.com/MSOpenTech/redis/releases下载msi安装包。根据提示安装即可。
之后到终端执行
redis-server
如果报错
[12596] 21 Feb 12:07:17.520 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server.exe /path/to/redis.conf
[12596] 21 Feb 12:07:17.525 # Creating Server TCP listening socket *:6379: bind: No such file or directory
是因为之前的redis服务没有关闭,执行:
redis-cli
127.0.0.1:6379> shutdown
not connected> exit
redis-server
安装django-redis
因为我使用了pipenv虚拟环境,我使用以下语句安装:
pipenv install django_redis
settings配置
在settings.py下添加以下代码:
CACHES = {
'default':{
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379',
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
LOCATION需配置开启redis的端口。
测试是否添加成功
在终端中输入命令,进入django后台命令模式
pipenv run python manage.py shell
输入
from django.core.cache import cache #引入缓存模块cache.set('cherie', '123', 60) #写入key为cherie,值为123的缓存,有效期1分钟
cache.get('cherie') #获取key为cherie的缓存
如果没有报错,成功获取值,则redis添加成功。
应用
全站使用缓存
使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用 FetchFromCacheMiddleware 获取内容并返回给用户,如果不存在则UpdateCacheMiddleware 会将缓存保存至缓存,从而实现全站缓存。
在settings里配置:
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', //重写了process_response
......
'django.middleware.cache.FetchFromCacheMiddleware', //重写了process_request
]
CACHE_MIDDLEWARE_SECONDS = 60 # 缓存超时时间设为60秒
单独视图缓存
如果配置了全局缓存的中间件,需先删除掉。
单独视图的缓存在视图函数上加上一个装饰器即可。
在views.py中添加以下代码:
from django.views.decorators.cache import cache_page
@cache_page(60) //设置超时时间为60秒
def index(request):
......
模板局部视图使用
views.py不需要修改,在templation里添加:
# 1.引入TemplateTag
{% load cache %}
# 2.使用缓存
{% cache 60 name %} # 缓存超时(秒) 和 缓存片段的名称(名称按原样使用)
缓存内容
{% endcache %}
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 【性能】DJANGO + REDIS 缓存提速
发表评论 取消回复