django redis的使用方法详解
作者:冰冷的希望 发布时间:2023-08-03 10:54:30
1.说明
redis作为一个缓存数据库,在各方面都有很大作用,Python支持操作redis,如果你使用Django,有一个专为Django搭配的redis库,即django-redis
2.安装
pip install django-redis
3.配置
3.1 配置redis
打开Django的配置文件,比如说setting.py,里面设置CACHES项
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
一个CACHES里可以配置多个redis连接信息,每一个都有自己的别名(alias),上面的“default”就是别名,到时候可以通过不同别名连接不同redis数据库
LOCATION是连接的信息,包括ip端口用户密码等,如果不需要用户密码则可以省略不写,django-redis支持三种连接协议,如下
协议 | 说明 | 举例 |
---|---|---|
redis:// | 普通的TCP套接字连接 | redis://[[username]:[password]]@localhost:6379/0 |
rediss | SSL方式的TCP套接字连接 | rediss://[[username]:[password]]@localhost:6379/0 |
rediss:// | Unix域套接字连接 | unix://[[username]:[password]]@/path/to/socket.sock?db=0 |
3.2 使用redis存储session
Django默认的Session是存储在sql数据库里的,但我们都知道普通的数据会被数据存储在硬盘上,速度没有那么快,如果想改成存储在redis里,只需要在配置文件里配置一下就行
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
3.3 redis连接超时时间设置
连接超时的秒数可以在配置项里指定,SOCKET_CONNECT_TIMEOUT表示连接redis的超时时间,SOCKET_TIMEOUT表示使用redis进行读写操作的超时时间
CACHES = {
"default": {
# ...
"OPTIONS": {
"SOCKET_CONNECT_TIMEOUT": 5, # 连接redis超时时间,单位为秒
"SOCKET_TIMEOUT": 5, # redis读写操作超时时间,单位为秒
}
}
}
4.使用redis
4.1 使用默认redis
如果你想使用默认的redis,也就是在配置文件里设置的别名为“default”的redis,可以引用django.core.cache里的cache
from django.core.cache import cache
cache.set("name", "冰冷的希望", timeout=None)
print(cache.get("name"))
4.2 使用指定redis(原生redis)
当你在配置文件里写了多个redis连接,可以通过别名指定要使用哪个redis
from django_redis import get_redis_connection
redis_conn = get_redis_connection("chain_info")
redis_conn.set("name", "icy_hope")
print(redis_conn.get("name"))
要注意,通过get_redis_connection()获取得到的客户端是原生Redis客户端,虽然基本上支持所有的原生redis命令,但它返回的数据是byte类型,你需要自己decode
5.连接池
使用连接池的好处是不用管理连接对象,它会自动创建一些连接对象并且尽可能重复使用,所以相当来说性能会好一点
5.1 配置连接池
要使用连接池,首先要在Django的配置文件里写上连接池的最大连接数
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
...
"OPTIONS": {
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
}
}
}
5.2 使用连接池
我们可以通过连接别名确定要使用哪个redis,然后正常执行命令就行,我们不用在乎它创建了哪些连接实例,但你可以通过connection_pool的_created_connections属性查看当前创建了多少个连接实例
from django_redis import get_redis_connection
redis_conn = get_redis_connection("default")
redis_conn.set("name", "冰冷的希望")
print(redis_conn.get("name"))
# 查看目前已创建的连接数量
connection_pool = redis_conn.connection_pool
print(connection_pool._created_connections)
5.3 自定义连接池
Django-redis默认的连接的类是DefaultClient,如果你有更高的定制需求,可以新建一个自己的类,继承ConnectionPool
from redis.connection import ConnectionPool
class MyPool(ConnectionPool):
pass
有了这个类之后还需要在Django的配置文件里指定它
"OPTIONS": {
"CONNECTION_POOL_CLASS": "XXX.XXX.MyPool",
}
来源:https://blog.csdn.net/qq_39147299/article/details/127655010
猜你喜欢
- 这样的问题是因为 数据库字符集,表字符集,字段字符集都设为:gbk_chinese_ci 注意数据库连接串里面的 Stmt=Set Name
- 数据库快照是怎样工作的可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照,在声明中有一个源数据库快照的附加说明。
- 本文实例讲述了Python使用add_subplot与subplot画子图操作。分享给大家供大家参考,具体如下:子图:就是在一张figure
- python 定时器默认定时器只执行一次,第一个参数单位S,几秒后执行import threadingdef fun_timer(): pr
- 研究编码,得知GB2312编码与区位码的关系,尝试之后,得此程序。搜索,似乎没人写,故发此地。1.简述(1)GB2312标准的定义,其实就是
- 管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。但实际上并非如此。在这里,我们列出了一些对于SQL Serve
- EXEC SQL WHENEVER SQLERROR CONTINUE; sqlglm(msg_buffer, &buf
- 这将为我们的团队节省每天重复的数据处理时间......简介如果你目前在一个数据或商业智能团队工作,你的任务之一可能是制作一些每日、每周或每月
- 这段程序的方法是利用XMLHTTP来读取腾讯网站的相应HTML代码获取QQ的头像,根据这个想法,我们还
- 如下所示: static void Main()&nbs
- php代码很简单:$server="127.0.0.1";println("Begin");$lin
- 本文实例讲述了PHP中round()函数对浮点数进行四舍五入的方法。分享给大家供大家参考。具体方法如下:语法:round(x,prec)参数
- OL是有序列表,但给list-style-type:decimal 定义,在IE中却显示的全是1,在火狐、Opera、谷歌、Safari等中
- 前言在 Go 单元测试这个系列的第二部分 数据库的Mock测试 中我们介绍了用 go-sqlmock 给数据库的 CRUD 操作做Mock
- 在今天的设计中,排版常常被忽视,特别是被网页设计师忽视。这真是件遗憾的事情因为CSS可以做很多事情来控制我们的排版。也就是说,我们被局限于某
- python编写计算器,供大家参考,具体内容如下(1)计算器界面如下:(2)基本满足了计算器的所有需求,使用时不可键盘输入,只能鼠标点击左键
- 技术栈win7+python3+selenium之前有个需求需要实现自动化提流程,为了在任何电脑都能实现该功能,特此写了个爬虫,并将其打包成
- 以前经常吃公司旁边的食堂,人多,排队。夏天的时候,我们总要找一个靠窗口通风好的地方坐,没有空调只有风扇,风扇很多,开关都集中在一个地方,应该
- Go 中时间格式化的模板const ( ANSIC = "Mon Jan _2 15:04:
- 如何做一个文本搜索? 比较简单,见下:<%Head = "搜索"SearchStri