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

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只有五大数据类型,缓存对象类型很显然是不支持的,那它是怎么做到的呢?
  • 本质原理(源码)把python数据类型通过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('缓存成功')

 

 

posted @ 2022-11-20 14:32  Tutu007  阅读(1009)  评论(0编辑  收藏  举报