django中使用redis缓存

django中使用redis有两种方式:

  • 通过redis模块直接操作redis数据库
  • 通过django-redis模块使用django的缓存cache【下文介绍内容】

下载安装

pip install django-redis

配置缓存redis

将缓存存储位置配置到redis中:settings.py

# settings.py

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",		# 使用django-redis的缓存
        "LOCATION": "redis://127.0.0.1:6379/0",			# redis数据库的位置
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
            "DECODE_RESPONSES": True,			# 自动将byte转成字符串
            "PASSWORD": "",						# 设置密码
        }
    }
}

使用django缓存redis的两种方式

django-redis的使用有两种方式,第一种方式比较简单直接操作缓存cache,

因为已经配置好了cache使用redis,可以直接通过cache存取数据,且支持python所有的数据类型(包括类对象等)。

# 第一种方式
from django.core.cache import cache

# 存放token,可以直接设置过期时间
cache.set('token', 'header.payload.signature', 300)
# 取出token
token = cache.get('token')

第二种方式是直接使用conn对象,体验原生redis的操作方式

# 第二种方式
from django_redis import get_redis_connection

# 获取redis的conn对象
conn = get_redis_connection('default')

# 通过conn对象操作redis
print(conn.hgetall('xxx'))

接口缓存

当某些接口的调用次数非常高时,可以使用接口缓存的方式,将接口返回的内容放到缓存中;

这样当这个接口再次被调用时首先到缓存中找数据,如果缓存中有数据直接返回;如果缓存中没有数据再去数据库中查找需要的数据,并同时将数据放到缓存中。

这样操作后,就避免了多次操作数据库。

# 首页轮播图数据缓存到redis中
def list(self, request, *args, **kwargs):
    # 1 先去缓存拿数据
    banner_list=cache.get('banner_list')
    if not banner_list:
        # 缓存中没有,再去数据库拿;有缓存直接返回
        response = super().list(request, *args, **kwargs)
        # 同步到缓存
        cache.set('banner_list', response.data, 60*60*24)	# 加一天的过期时间
        return response

    return Response(data=banner_list)

统计接口的访问频次

利用缓存,统计网站中所有接口被调用的次数。

实现思路1:在中间件中通过请求url,使用redis缓存增加该接口的调用频次;

实现思路2:在每个接口中,通过redis缓存增加该接口的调用次数。

posted @ 2020-07-25 13:13  the3times  阅读(3591)  评论(0编辑  收藏  举报