记一次:Python的学习笔记三(Django集成Redis)

前言:在开发中,我们有时候需要使用缓存,那么本篇就介绍一下django集成Redis的操作

1、 Redis之本地连接

python 相当于redis的客户端进行操作redis,我们操作redis只需要安装响应模块即可

1>安装模块命令

pip install redis

注意:django中操作mysql是没有连接池的,一个请求就是一个mysql连接,但是这样可能会处问题,并发数过高,导致mysql连接数过高,影响mysql性能

2> 普通连接

在python中安装 redis 模块

导入模块Redis类

from redis import Redis

实例化得到对象

conn = Redis(host='127.0.0.1',port=6379)

使用conn操作redis

res = conn.get('name') # 返回数据是bytes格式

设置值

conn.set('age',19)

conn.close()

2 自定义包方案(通用方案,不针对与django其他也可以用)

1.写一个pool.py

2.在以后使用的地方直接使用即可

java 复制代码
import redis
POOL = redis.Connectionpool(max_connections=100)
conn = redis.Redis(connection_pool=Pool)
conn.incr('count')
res = conn.get('count')
return JsonResponse({'count':"今日访问次数%s"%res})

3、 第三方django-redis模块【推荐使用】

3.1安装django-redis扩展包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django-redis

或者pip install django-redis

3.2 settings.py配置Redis数据库

在配置文件settings.py中配置

目的:使用Redis数据库存储缓存数据或者状态保持数据等

参考文档:https://django-redis-chs.readthedocs.io/zh_CN/latest/

redis配置

java 复制代码
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",
        }
    }
}

3.3 在视图函数中使用

java 复制代码
# 使用的位置
from django_redis import get_redis_connection

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

Urls.py配置请求路径

path('redisTest/',views.redisTest2),

查看redis库

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

例如下面的 cache.set('tutu', 'hobby', 'film')。用的是Django的缓存,不是用的conn.hset

解释:

1、django的缓存很高级,它可以缓存python中所有的数据类型,包括对象,但是redis只有五大数据类型,缓存对象类型很显然是不支持的,那它是怎么做到的呢?

2、本质原理(源码)把python数据类型通过pickle序列化成二进制,以字符串的形式缓存到redis中。拿出来后再通过pickle 反序列化回来就是对象。pickle 是 python 语言的一个标准模块,安装 python 的同时就已经安装了 pickle 库,因此它不需要再单独安装,使用 import 将其导入到程序中,就可以直接使用。

3、pickle能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。它通过提供4个函数来实现,其中 dumps 和 loads 实现基于内存的 Python 对象与二进制互转;dump 和 load 实现基于文件的 Python 对象与二进制互转。

4、用cache比用conn.set ,conn.get等命令要强得太多,只管写只管取,它自动地给你转,不需要管它是什么类型了。

5、以前缓存是缓存到内存中,重启后数据就没了,现在缓存到redis中后,再重启数据也不会丢失,这是缓存到内存中和缓存到redis的区别。

操作:

Views.py视图函数:

java 复制代码
from django.core.cache import cache

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

Urls.py配置路径

path('redisTest/',views.redisTest2),

运行,请求

查看redis数据

取值:

java 复制代码
from django.core.cache import cache

def test2(request):
    # cache.set('hobby', 'film')
    print(cache.get('hobby'))
    return HttpResponse('缓存成功')
相关推荐
databook12 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar13 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805114 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_14 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机20 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机21 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 天前
drf初步梳理
python·django
每日AI新事件1 天前
python的异步函数
python