django_redis

下载

>: pip install django-redis

说明

django连接django_redis后会顶替原memcache数据库
django使用django_redis缓存数据库是通过内存管理来操作,所以需要导入django的内存管理cache 补充:
原生redis不能存储drf序列化的结果,因为其结果不是字符串类型,所以使用django_redis
可以将django_redis理解为是redis的辅助工具,可以将drf序列化后的结果存入redis库中

补充知识: django内存管理

from django.core.cache import cache

# 内存中设置值
cache.set(key, value, exp)
# 取值
cache.get(key) 注:默认操作的是django的memcache内存数据库

使用

配置: settings/dev.py
# 缓存配置 - redis存储:依赖 django-redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/7", # 连入指定数据库 这里连接的是7号数据库
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100} # 最大连接数
}
}
}

案例:

import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")
django.setup() from django.core.cache import cache
from user.models import User
from rest_framework.serializers import ModelSerializer class UserModelSerializer(ModelSerializer):
class Meta:
model = User
fields = ['username', 'password']
# 获取用户对象
user_obj = User.objects.all().first()
# 序列化
user_data = UserModelSerializer(user_obj).data
print(user_data)
# {'username': 'admin', 'password': 'pbkdf2_sha256$0oIWjJbH98M$tbYJl1ja25oSXOxv8WW8I8fxsb3/tZgbtgcDhUbTyuQ='}
print(type(user_data)) # <class 'rest_framework.utils.serializer_helpers.ReturnDict'>
# 存入redis内存数据库
cache.set(user_obj.username, user_data , 10) # 参数: key, value, 过期时间/秒
# 取出
res = cache.get(user_obj.username)
print(res)
# {'username': 'admin', 'password': 'pbkdf2_sha256$IWjJbH98M$tbYJl1ja25oSXOxv8WW8I8fxsb3/tZgbtgcDhUbTyuQ='}
print(type(res)) # <class 'dict'>

缓存接口

当接口的访问量大,且数据比较固定,建议建立缓存接口

利用redis内存数据库,将数据存入带redis中,有缓存时走缓存,每缓存时走数据,并在redis中存一份.

案例:

from rest_framework.generics import ListAPIView
from . import models, serializers
from settings.const import BANNER_COUNT # 访问量大,且数据较固定的接口,建议建立接口缓存
from django.core.cache import cache
from rest_framework.response import Response
class BannerListAPIView(ListAPIView):
queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by('-orders')[:BANNER_COUNT]
serializer_class = serializers.BannerModelSerializer # 缓存有,走缓存,缓存没有走数据库
def list(self, request, *args, **kwargs):
banner_data = cache.get('banner_list')
if not banner_data:
print('走数据库')
response = super().list(request, *args, **kwargs)
banner_data = response.data
# 建立缓存,不建议设置缓存过期时间,用celery等框架后台异步更新缓存即可
cache.set('banner_list', banner_data)
return Response(banner_data)

django使用redis的更多相关文章

  1. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  2. redis的使用与 django的redis的使用

    1. 使用redis数据库分为两种: 第一种是在python语言中直接使用的方式, 第二种就是在django中使用django_redis模块来数用 第一种直接在python语言中使用redis im ...

  3. django celery redis 定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  4. Django中redis的使用方法(包括安装、配置、启动)

    一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2. ...

  5. django+celery+redis实现运行定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  6. django使用redis做缓存

    Django 使用 Redis 做缓存 django中应用redis:pip3 install django-redis - 配置 CACHES = { "default": { ...

  7. django celery redis简单测试

    希望在下一版中,能用这个小芹菜,来实现异步的多任务并行哈. 安装REDIS之类的不表,只说在DJANGO当中要注意配置的事项. 0,安装插件 yum install redis-server pip ...

  8. python用Django+Celery+Redis 监视程序(一)

    C盘创建一个目录就叫DjangoDemo,然后开始在该目录下操作. 1.新建Django工程与应用 运行pip install django 安装django 这里我们建一个名为demo的项目和hom ...

  9. django - 总结 - redis缓存

    八.redis 补充- 操作 - 增删改查 对字典,重新设计结构,增删改查. hmset  keys  hget   scan_iter  hgetall  import redis import j ...

  10. Django使用redis实现缓存

    实现缓存的方式,有多种:本地内存缓存,数据库缓存,文件系统缓存.这里介绍使用Redis数据库进行缓存. 配置 CACHES = { "default": { "BACKE ...

随机推荐

  1. linux中安装python3.7

    linux中安装python3.7 1. 安装依赖包 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite- ...

  2. 常见的几种异常类型 Exception

    常见异常类型:Java中的异常分为两大类: 1.Checked Exception(非Runtime Exception) 2.Unchecked Exception(Runtime Exceptio ...

  3. Django-02-django的命令行工具

    django-admin.py 是Django的一个用于管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每一个Django Project里都会有一个mannag ...

  4. go 学习笔记(3)benchmark

    benchmark函数以benchmark开头 benchmark的case一般会跑b.N次,且每次执行都如此 在执行过程中会根据实际case的执行时间是否稳定会增加b.N的次数以达到稳态. pack ...

  5. C#只读属性

    using System; using System.Collections.Generic; using System.Text; namespace 面向对象 { class Person { / ...

  6. iOS - 适配iOS 11

    http://www.10tiao.com/html/330/201707/2653579210/1.html 存档 导语:iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. ...

  7. PS1变量设置

    \d :代表日期,格式为weekday month date \H :完整的主机名 \h :主机的第一个名字 \t :显示时间为24小时格式(HH:MM:SS) \T :显示时间为12小时格式 \A ...

  8. 批量改主机名报错:Address 192.168.43.117 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

    ssh连接批量修改主机名报出以下提示: [root@bqh-nfs- ~]# vim modfilyhostname.sh [root@bqh-nfs- ~]# sh modfilyhostname. ...

  9. Python学习日记(十) 生成器和迭代器

    使用dir()我们可以知道这个数据类型的内置函数有什么方法: print(dir(int)) print(dir(bool)) print(dir([])) print(dir({})) print( ...

  10. 5.kafka API consumer

    1.kafka consumer流程1.1.在启动时或者协调节点故障转移时,消费者发送ConsumerMetadataRequest给bootstrap brokers列表中的任意一个brokers. ...