记一次: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('缓存成功')
相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘7 小时前
FreeRTOS学习笔记(应用)-- 各种 信号量的应用场景
笔记·学习
星星火柴9368 小时前
笔记 | C++面向对象高级开发
开发语言·c++·笔记·学习
BeingACoder8 小时前
【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型
java·笔记·学习·saa·springai
电院工程师8 小时前
SIMON64/128算法Verilog流水线实现(附Python实现)
python·嵌入式硬件·算法·密码学
安全不再安全9 小时前
免杀技巧 - 早鸟注入详细学习笔记
linux·windows·笔记·学习·测试工具·web安全·网络安全
BreezeJuvenile9 小时前
外设模块学习(8)——HC-SR04超声波模块(STM32)
stm32·单片机·嵌入式硬件·学习·超声波测距模块·hc-sr04
LBuffer9 小时前
破解入门学习笔记题三十八
笔记·学习
Python图像识别10 小时前
75_基于深度学习的咖啡叶片病害检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
微露清风10 小时前
系统性学习C++-第十讲-stack 和 quene
java·c++·学习
闲人编程10 小时前
Python游戏开发入门:Pygame实战
开发语言·python·游戏·pygame·毕设·codecapsule