慕课网-Django入门到进阶-更适合Python小白的系统课程-第4章Django中的ORM和数据库-4.7redis在django中的两种配置方法与使用&缓存装饰器的书写
第4章 Django 中的 ORM 和数据库
4.7 redis 在 django 中的两种配置方法与使用&缓存装饰器的书写
什么是 Redis
1.Redis 是一个基于内存的非关系型数据库。他通过 key:value 的形式存储。有着多种数据结构,如字符串、列表、集合等。
2.通过 Redis 我们可以进行数据缓存,防止底层数据库频繁 IO,提升性能。
Redis 的依赖
pip install redis pip install django-redis
Django 中 Redis 的配置方法
CHCHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密码",
}
}
}
不依赖 Django 的 Redis 配置方法
import redis conn = redis.Redis(host='10.0.0.10', port=6379)
Django 中使用 Redis 方法
from django_redis import get_redis_connection
cache = get_redis_connection('default')
cache.set(key, value, expire)
rs = cache.get(key)
from xxx import redis_conn
redis.conn.set(key, value, expire)
rs = redis_conn.get(key)
Redis 的安装
#Mac brew install redis #Ubuntu apt-get install redis #Centos/redhat yum install redis #Window #下载链接:http://www.redis.net.cn/download/
Redis 启动方法
./redis-server & ./redis-server 配置文件.conf
实例
1.在命令行窗口添加 Redis 组件
pip install redis pip install django-redis
2.在项目 Four 下目录 four,修改文件 settings.py,在 DATABASES 行下添加 Redis 配置
# Redis 配置
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
'CONNECTION_POOL_KWARGS': {
'max_connections': 200
}
}
}
}
3.打开 Redis 服务端
4.在项目 four 下进入 shell
python manage.py shell
5.在 shell 输入代码测试
from django_redis import get_redis_connection
cache = get_redis_connection('default')
cache.set('name', 'dewei', 10)

6.打开 Redis 客户端,查看数据
get name

7.在 shell 输入代码测试
cache.set('name', 'dewei', 100)
cache.get('name')

8.在 shell 输入代码测试,换另外一种操作 redis 方式
import redis
cache = redis.Redis(host='localhost', port=6379)
cache.set('name', 'dewei')
cache.get('name')

9.在 shell 输入代码测试,查看数据类型
value = cache.get('name')
type(value)

10.在 shell 输入代码测试,查看 Json
import json
data = {'age', 20}
cache.set('name', json.dumps(data))
value = cache.get('name')
value
# 可能会报错,Python 版本不一样可能出现不会报错的情况(例如:Python 3.5 会报错)
json.loads(value)
# 改成这样
json.loads(value.decode('utf-8'))

10.在项目 Four 下目录 app,修改文件 models.py,添加 Redis 代码,并修改类 User
#coding: utf-8
import json
from functools import wraps
from django.db import models
from django_redis import get_redis_connection
_cache = get_redis_connection('default')
def cache(func):
@wraps(func)
def wrapper(obj, *args):
key = args[0]
value = _cache.get(key)
if value:
print('get it!')
return json.loads(value)
rs = func(obj, *args)
_cache.set(key, json.dumps(rs))
return rs
return wrapper
class Test(models.Model):
name = models.IntegerField()
class User(models.Model):
username = models.CharField(unique=True, max_length=50, blank=False)
age = models.SmallIntegerField(default=0)
phone = models.IntegerField(db_index=True, blank=True, default=0)
email = models.EmailField(blank=True, default='')
info = models.TextField()
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
index_together = ['username', 'phone']
def __str__(self):
return 'user:{}'.format(self.username)
@classmethod
@cache
def get(cls, id):
rs = cls.objects.get(id=id)
return {
'id': rs.id,
'username': rs.username,
'age': rs.age,
'email': rs.email,
'info': rs.info,
'create_time': str(rs.create_time),
'update_time': str(rs.update_time)
}
class Userprofile(models.Model):
user = models.OneToOneField(User, blank=True, null=True, on_delete=models.SET_NULL)
birthday = models.CharField(max_length=100, blank=True, default='')
def __str__(self):
return 'user:{}, birthday:{}'.format(self.user.username, self.birthday)
class Diary(models.Model):
user = models.ForeignKey(User, related_name='diary', on_delete=models.SET_NULL, blank=True, null=True)
content = models.TextField()
create_time = models.IntegerField()
class Group(models.Model):
user = models.ManyToManyField(User, related_name='group')
name = models.CharField(max_length=20)
create_time = models.IntegerField()
11.在项目 four 下进入 shell
python manage.py shell
12.进入 shell 输入代码测试
from app.models import User user = User.get(1) user

13.打开 Redis 客户端,查看数据

posted on 2020-02-01 10:12 herisson_pan 阅读(10) 评论(0) 收藏 举报
浙公网安备 33010602011771号