django缓存配置redis

django中默认使用Memcache 作为缓存,一旦重启服务,数据就会丢失,不能持久化。

在项目中,过多需要缓存的不是简单数据,而是对象,比如 model类对象

1
2
3
4
5
6
7
8
9
10
11
12
13
import redis
pool = redis.ConnectionPool(max_connections=100, decode_responses=True)
rdb = redis.Redis(connection_pool=pool)


user_query = User.objects.all()
rdb.setex('user_query', 300, user_query) # 原生redis不能直接操作对象,会报错

from user.models import User
from django.core.cache import cache

cache.set('user_query', user_query) # django默认是使用Memcache 作为缓存
print(cache.get('user_query')) # 一旦重启服务,数据就会丢失,不能持久化。

django缓存配置redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1.将缓存存储位置配置到redis中:settings.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100},
"DECODE_RESPONSES": True,
"PASSWORD": "",
}
}
}

# 2.操作cache模块直接操作缓存:views.py
from django.core.cache import cache # 结合配置文件实现插拔式
# 存放token,可以直接设置过期时间
cache.set('token', 'header.payload.signature', 300)
# 取出token
token = cache.get('token')

django接口缓存

后台接口是提供数据库的,IO操作慢,可以将数据存储在缓存中,接口数据从缓存中调用

一般将大量访问(数据时效性要求不是很苛刻)的接口建立缓存

数据缓存思想:数据先走缓存,有直接返回,没有走数据库(同步到缓存)

首页轮播图需要经常访问,将轮播图的查询接口 建立缓存。

1
2
3
4
5
6
7
8
def list(self, request, *args, **kwargs):
data = cache.get('banner_cache')
if not data:
print('在走数据库')
response = super().list(request, *args, **kwargs)
cache.set('banner_cache', response.data)
return response
return Response(data)