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缓存增加该接口的调用次数。