笔记-python-redis接口
笔记-python-redis接口
1. python 与redis接口
redis是redis数据库的python接口包,为python提供的redis的调用接口。
注:文档内容主要基于https://pypi.org/project/redis/,使用包版本为2.10.6.
1.1. 安装redis接口包
安装
pip3 install redis
import redis
2. API
Redis 官方文档详细解释了每个命令,redis-py 提供了两个实现这些命令的客户端类。StrictRedis 类试图遵守官方的命令语法,但也有几点例外:
·SELECT:没有实现。参见下面“线程安全”部分的解释。
·DEL:’del’ 是 Python 语法的保留关键字。因此redis-py 使用 “delete” 代替。
·CONFIG GET|SET:分别用 config_get 和 config_set 实现。
·MULTI/EXEC:作为 Pipeline 类的一部分来实现。若在调用pipeline 方法时指定use_transaction=True,在执行 pipeline 时会用 MULTI 和 EXEC 封装 pipeline 的操作。参见下面 Pipeline 部分。
·SUBSCRIBE/LISTEN: 和 pipeline 类似,由于需要下层的连接保持状态, PubSub 也实现成单独的类。调用 Redis 客户端的 pubsub 方法返回一个 PubSub 的实例,通过这个实例可以订阅频道或侦听消息。两个类(StrictRedis 和 PubSub 类)都可以发布(PUBLISH)消息。
除了上面的改变,StrictRedis 的子类 Redis,提供了对旧版本 redis-py 的兼容:
·LREM:参数 ‘num’ 和 ‘value’ 的顺序交换了一下,这样‘num’ 可以提供缺省值 0.
·ZADD:实现时 score 和 value 的顺序不小心弄反了,后来有人用了,就这样了
·SETEX: time 和 value 的顺序反了
redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
注:最好不要用 Redis,这个类只是做兼容用的
2.1. 连接池
为了节省资源,减少多次连接损耗,连接池的作用相当于总揽多个客户端与服务端的连接,当新客户端需要连接时,只需要到连接池获取一个连接即可,实际上只是一个连接共享给多个客户端。默认情况下每个连接会创建一个连接池,但可以自行指定。
示例代码:
import redis
pool= redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)
r=redis.Redis(connection_pool=pool)
r2=redis.Redis(connection_pool=pool)
r.set('apple','a')
print(r.get('apple'))
r2.set('banana','b')
print(r.get('banana'))
print(r.client_list())
print(r2.client_list())#可以看出两个连接的id是一致的,说明是一个客户端连接
2.2. 连接模式:
连接池管理连接实例的集合,redis-py支持两种类型的连接。默认的连接方式是一个基于套接字的TCP连接。UnixDomainSocketConnection允许在sever服务器上使用unix domain socket连接数据库。使用UnixDomainSocketConnection,需要unix_socket_path参数,它是一个字符串。另外使用前需要在redis.conf文件中定义unixsocket,默认情况下是禁用的。
r = redis.Redis(unix_socket_path=’/tmp/redis/sock’)
这样可以创建连接自己的连接子类,一般用于在异步编程时控制套接字的行为。
要使用自建的连接实例,需要创建一个连接池,并把自建类传递给connection_class参数。
pool = redis.ConnectionPool(connection_class=YourConnectionClass,
your_arg='...', ...)
2.3. 解析器
解析类用于解析redis服务器返回的数据。redis-py提供了两个解析类,the PythonParser and the HiredisParser.
默认情况下,redis-py will attempt to use the HiredisParser if you have the hiredis module installed and will fallback to the PythonParser otherwise.
Hiredis是由Redis核心团队维护的C库。使用Hiredis可以在解析Redis服务器的响应时提速10倍。
Hiredis已发布到PyPI,可以通过pip或easy_install安装:
pip install hiredis或者easy_install hiredis
3. 操作
操作:
值的设置和获取,可以参考redis的命令,redis模块中的对应功能的函数名基本与redis中的一致
【注意默认情况下,设置的值或取得的值都为bytes类型,如果想改为str类型,需要在连接时添加上decode_responses=True】
设置值:
redis中set() ==>r.set()
redis中setnx() ==>r.set()
redis中setex() ==>r.setex()
redis中setbit() ==>r.setbit()
redis中mset() == > r.mset()
redis中hset() ==>r.hset()
redis中sadd() == >r.sadd()
其他。。。基本redis的命令名与redis模块中的函数名一致
获取:
redis中get() ==》r.get()
redis中mget() ==》r.mget()
redis中getset() ==》r.getset()
redis中getrange() ==》r.getrange()
其他。。。基本redis的命令名与redis模块中的函数名一致