首页 > 数据库 >Django中使用Redis---通用方案和第三方django-redis

Django中使用Redis---通用方案和第三方django-redis

时间:2022-11-20 14:48:10浏览次数:47  
标签:缓存 redis cache Redis py django import Django

1. 通用方案

通用方案和Django没关系,其他框架也是一样用。

首先,在user文件夹下,建立pool.py

└─apps
│ ├─user
│ │  │ pool.py
│ │  │ views.py
│ │  │ urls.py

import redis

# 创建池,池的大小为1000,最多放1000个连接
POOL = redis.ConnectionPool(max_connections=1000)    

在views.py 视图函数中使用redis:

from django.shortcuts import HttpResponse
from .pool import POOL
import redis

# 设置值
def test1(request):
    conn = redis.Redis(connection_pool=POOL)
    conn.set('name', 'tutu')
    return HttpResponse('设置成功')

路由配置urls.py:

from django.urls import path
from . import views

urlpatterns = [    
    path('test1/', views.test1),   # 调用视图函数test1。(已在根路由做了路由分发)
]

右键点击运行后,查看redis就存有key为name,value为tutu了。

redis取值:

------------------views.py-------------------

from .pool import POOL
import redis

# redis取值
def test2(request):
    conn = redis.Redis(connection_pool=POOL)
    res = conn.get('name')
    print(res)
    return HttpResponse('取值成功')

------------------urls.py------------------- 

path('test2/', views.test2),

取值成功:

 

 

 

 

 

2. Django方案,第三方模块django-redis

①  安装django-redis

pip install django-redis

② 在配置文件settings.py中配置

# 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": 1000}
            # "PASSWORD": "123",
        }
    }
}

③ 在视图函数中使用

# 使用的位置
from django_redis import get_redis_connection

def test2(request):
    conn = get_redis_connection()  #从连接池中拿一个连接
    res=conn.get('name')
    print(res)
    return HttpResponse('用django-redis取值成功')

取值成功:

 

④ 后续Django缓存都缓存到redis中

例如下面的 cache.set('tutu', 'hobby', 'film')。用的是Django的缓存,不是用的conn.hset。(下面这五段话可以忽略不看)

  •  django的缓存很高级,它可以缓存python中所有的数据类型,包括对象,但是redis只有五大数据类型,缓存对象类型很显然是不支持的,那它是怎么做到的呢?
  • 本质原理(源码)是把对象通过pickle序列化成二进制,存到redis的字符串中,拿出来后再通过pickle 反序列化回来就是对象。pickle 是 python 语言的一个标准模块,安装 python 的同时就已经安装了 pickle 库,因此它不需要再单独安装,使用 import 将其导入到程序中,就可以直接使用。
  • pickle能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。它通过提供4个函数来实现,其中 dumps 和 loads 实现基于内存的 Python 对象与二进制互转;dump 和 load 实现基于文件的 Python 对象与二进制互转。
  • 用cache比用conn.set ,conn.get等命令要强得太多,只管写只管取,它自动地给你转,不需要管它是什么类型了。
  • 以前缓存是缓存到内存中,重启后数据就没了,现在缓存到redis中后,再重启数据也不会丢失,这是缓存到内存中和缓存到redis的区别。

视图函数:

from django.core.cache import cache

def test2(request):
    cache.set('hobby', 'film')
    return HttpResponse('缓存成功')

运行,设置成功

 

 

 

 

 

 

取值:

from django.core.cache import cache

def test2(request):
    # cache.set('hobby', 'film')
    print(cache.get('hobby'))
    return HttpResponse('缓存成功')

 

 

标签:缓存,redis,cache,Redis,py,django,import,Django
From: https://www.cnblogs.com/tully/p/16907435.html

相关文章

  • django中实现excel的下载功能
    利用python中的xlsxwriter库,注意该库只能创建excel.而不支持读取和修改,也不支持XLS格式。1.urls.pyfromdjango.contribimportadminfromdjango.urlsimportpath,i......
  • Redis集群的搭建3主3从
    1、软件版本组件版本redis6.2.62、将部署包redis-6.2.6.tar.gz上传安装包到/usr/local/目录下;3、解压redis部署包3、解压redis部署包[root@hudi3local]#tar-xvfredis-6.2......
  • 五、Redis企业实战 - 分布式锁
    你们有随时可以打扰的人吗利用Redis实现分布式锁基本原理分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想:就是让大家(集群中的所有......
  • redis远程连接配置
    远程连接配置1.1操作步骤需要几个步骤:修改配置文件,修改这么几处:1)关闭保护模式protected-mode2)改为“需要密码”3)修改绑定IP重启redis,即可下面拆解步骤来描......
  • springboot整合redis详解
    springboot整合redis1.首先创建springboot工程2.配置pom.xml文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns......
  • Django Rest_Framework(一)
    目录1.Web应用模式2.api接口3.RESTfulAPI规范4.序列化5.DjangoRest_Framework特点6.环境安装与配置6.1安装DRF6.1.1创建django项目6.2添加rest_framework应用6.......
  • Redis学习(六)之redis中的数据类型之SortedSet类型
      1、sortedset中每个元素有一个浮点值。 2、浮点值越大的,元素排序就大,浮点值相同,则按元素的字符串值比较。 3、元素必须唯一。  1、ZADDkey[NX|XX][GT......
  • 开发笔记1.2-Redis的配置和使用
    1.下载Redis的安装包首先需要去官网下载redis的安装包下载地址:https://redis.io/download/2.安装预备工作2.1创建对应目录和放置文件到指定目录#新建/usr/loca......
  • django---中间件
    中间件当用户发送请求时,其实时候是将请求发送给wsgi(一种协议),django使用的是wsgiref,然后再将请求发送给django的各个中间件(settings里的MIDDLEWARE表示使用的中间件),再由......
  • django--路由系统
    django路由系统 --动态路由 #----urls.py----------urlpatterns=[path('admin/',admin.site.urls),path('index/',views.index),re_path(r'edit/(\w*)/',vi......