- 10. Redis 数据库
- 什么是 redis 数据库
redis 是一个基于内存的非关系型数据库, 它通过 key:value 的形式存储。有着多种数据结构,如字符串、列表、集合等。
通过 redis 我们可以进行数据缓存,防止底层数据库频繁 IO 提升性能。
- windows 安装 redis
https://github.com/microsoftarchive/redis/releases
- 启动 redis
启动服务: (启动服务独占一个 cmd 界面 )
redis-server.exe
启动界面:(需要重新开启一个 cmd 界面 )
redis-cli
- 安装 redis 库
pip install redis
pip install django-redis
- 创建子应用
python .manage.py startapp app
- settings.py
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app',
]
# IO 数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'user_redis',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': 3306
}
}
# 缓存数据库
# 依赖 django 配置 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
},
'PASSWORD': ''
}
}
}
# 不依赖 django 配置 redis import redis conn = redis.Redis(host='localhost', port=6379)
- models.py
from functools import wraps
from django.db import models
import json
# Create your models here.
# 缓存装饰器
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:
return json.loads(value)
rs = func(obj, *args)
_cache.set(key, json.dumps(rs))
return rs
return wrapper
class User(models.Model):
username = models.CharField(max_length=20)
age = models.IntegerField(default=0)
phone = models.CharField(max_length=10)
email = models.EmailField(max_length=20)
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 str[self.username, self.phone]
@classmethod
@cache
def get(cls, id):
rs = cls.objects.get(id=id)
return {
'id': rs.id,
'username': rs.username,
'age': rs.age,
'phone': rs.phone,
'email': rs.email,
'info': rs.info,
'create_time': str(rs.create_time),
'update_time': str(rs.update_time)
}
同步数据模型:
makemigrations app
模型写入数据库:
migrate app
- views.py
from django.shortcuts import render
# Create your views here.
from django.views import View
import redis
from app.models import User
class Index(View):
def get(self, request):
user = User()
user.username = '小钟'
user.age = '21'
user.phone = '123456789'
user.email = 'xxxxxxxx@qq.com'
user.info = '此人很懒,什么都没有留下。'
user.save()
return render(request, 'index.html')
- 测试



