栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django 操做 Redis 数据库(十五)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django 操做 Redis 数据库(十五)

Django 操做 Redis 数据库
  • 10. Redis 数据库

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')
  • 测试

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935777.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号