【笔记】Django项目中连接Redis

前言

Django项目中连接Redis学习笔记

下载依赖

1
2
pip3 install redis
pip3 install django-redis

修改全局配置

  • 在全局配置中的DATABASES配置后添加CACHES配置

CLIENT_CLASS:指定客户端
CONNECTION_POOL_KWARGS:指定连接池配置

max_connections:指定最大连接数

PASSWORD:指定密码,如果没有就不指定

<project_name>/<project_name>/settings.py
1
2
3
4
5
6
7
8
9
10
11
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379',
'OPTRONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
'CONNECTION_POOL_KWARGS': {'max_connections': 200},
#'PASSWORD': ''
}
}
}

Redis装饰器作为Mysql的缓存

  • 在从Mysql中查询数据时,先从Redis中查询
    • 如果能从Redis查询到数据,则直接从Redis中获取
    • 如果不能从Redis查询到数据,则从Mysql中查询数据,并存入Redis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import json
from functools import wraps
from django_redis import get_redis_connection
from django.db import models

定义一个缓存修饰器
_cache = get_redis_connection('default')
def cache(func):
@wraps(func)
def wrapper(obj, *args):
key = args[0]
value = _cache.get(key)
if value:
return json.loads(value)
result = func(obj, *args)
_cache.set(key, json.dumps(result))
return result
return wrapper

class User(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=5)

利用缓存修饰器定义一个类方法`get()`,当需要从缓存中获取数据时,直接调用`get()`方法即可
@classmethod
@cache
def get(cls, id):
从Mysql中查询数据,并保存到Redis
result = cls.objects.get(id=id)
return {
'id': result.id,
'name': result.name
如果有时间类型的数据,需要转换成字符串
#'time': str(result.time)
}

增删改查

引入模块

1
from django_redis import get_redis_connection

获取连接

1
cache = get_redis_connection('default')

添加或修改

不指定过期时间

1
cache.set('<key>', '<value>')

指定过期时间

<num>:指定过期时间,单位:秒

1
cache.set('<key>', '<value>', <num>)

完成

参考文献

哔哩哔哩——图灵学院教程