前言
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}, } } }
|
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 如果有时间类型的数据,需要转换成字符串 }
|
增删改查
引入模块
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>)
|
完成
参考文献
哔哩哔哩——图灵学院教程