不加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 %}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部