参考文章
工作中用到了redis,想写篇文章复习以及学习一下python连接redis的几种原始方式,而不是框架中的连接方法,以此作为记录。
一、Redis
类连接redis
python中要使用redis
,首先需要导入redis
模块:
import redis
使用redis.Reids
创建实例化对象:
import redis
rdb = redis.Redis(host=to_host, port=to_port, db=to_db, decode_responses=True)
例如:
import redis
rdb = redis.Redis(host="127.0.0.1", port=6379, db=9)
rdb.set("name", "苍")
print(rdb.get("name"))
# 输出
b'\xe8\x8b\x8d'
可以看出,输出的是字节格式,存取的时候redis
都会进行编码或者解码,redis
直接返回二进制的结果,对于结果还需要进行解码才能得到某些字符的显示。
不过也别担心,Redis
类提供了一个参数decode_responses
(解码响应),设置decode_response=True
即省去了获得的二进制结果解码的过程。
import redis
rdb = redis.Redis(host="127.0.0.1", port=6379, db=9, decode_responses=True)
rdb.set("name", "苍")
print(rdb.get("name"))
# 输出
苍
二、StrictRedis
连接
StrictRedis
和 Redis
的使用方式一样,参见源码:
StrictRedis = Redis
代码说明在目前版本redis 3.3.8
中,StrictRedis
和 Redis
一样,木有区别。(不知道说的对不对)
注意:在之前的某些版本中
redis-py
提供两个类Redis
和StrictRedis
用于实现Redis
的命令,StrictRedis
用于实现大部分官方的命令,并使用官方的语法和命令(比如,SET
命令对应与StrictRedis.set
方法)。Redis
是StrictRedis
的子类,用于向后兼容旧版本的redis-py
。简单说,官方推荐使用
StrictRedis
方法。
不推荐
Redis
类,原因是他和咱们在redis-cli
操作有些不一样,主要不一样是下面这三个方面。·
LREM
:参数‘num’
和‘value’
的顺序交换了一下,cli
是lrem queueName 0 ‘string’
。 这里的0时所有的意思。 但是Redis
这个类,把控制和string调换了。
·ZADD
:实现时score
和value
的顺序不小心弄反了,后来有人用了,就这样了
·SETEX
:time
和value
的顺序反了
.Pool
: 连接池
Redis
的连接池的方法:pool = redis.ConnectionPool(host=‘localhost‘, port=6379, db=0) r = redis.Redis(connection_pool=pool)
StrictRedis
的连接池的实现方式:pool = redis.ConnectionPool(host=‘127.0.0.1‘, port=6379) r = redis.StrictRedis(connection_pool=pool)
三、ConnectionPool
连接池连接Redis
使用连接池ConnectionPool
连接Redis
方式一: Redis连接池(不推荐)
from redis import ConnectionPool, Redis
pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = Redis(connection_pool=pool)
方式二: StrictRedis连接池
from redis import ConnectionPool, StrictRedis
pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = StrictRedis(connection_pool=pool)
例如:
from redis import ConnectionPool, Redis
pool = ConnectionPool(host="127.0.0.1", port=6379, db=9, decode_responses=True)
rdb = Redis(connection_pool=pool)
rdb.set("name", "苍")
print(rdb.get("name"))
# 输出
苍
四、Redis
中管道pipeline
redis-py
默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline
实现一次请求指定多个命令,并且默认情况下一次pipline
是 原子性操作。
方式一: Redis连接池管道(不推荐)
from redis import ConnectionPool, Redis
pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = Redis(connection_pool=pool)
pipe = rdb.pipeline(transaction=True) # 默认transaction为True
# redis的操作1
# redis的操作2
# ...
pipe.execute()
方式二: StrictRedis连接池管道
from redis import ConnectionPool, StrictRedis
pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = StrictRedis(connection_pool=pool)
pipe = rdb.pipeline(transaction=True) # 默认transaction为True
# redis的操作1
# redis的操作2
# ...
pipe.execute()
例如:
from redis import ConnectionPool, Redis
pool = ConnectionPool(host="127.0.0.1", port=6379, db=9, decode_responses=True)
rdb = Redis(connection_pool=pool)
pipe = rdb.pipeline(transaction=True)
rdb.set("name", "hero久诚")
rdb.set("age", 18)
pipe.execute()
print(rdb.get("name"))
print(rdb.get("age"))
# 输出
hero久诚
18
网友评论