提供完整录播课
安装
pip install fastzdp_redis
Python连接Redis
import redis
# 建立链接
r = redis.Redis(host='localhost', port=6379, db=0)
# 设置key
r.set('foo', 'bar')
# 获取key的值
print(r.get('foo'))
RESP3 支持
简单的理解: 支持更丰富的数据类型
参考文档:
https://blog.csdn.net/LZH984294471/article/details/114233835
https://trunks2008.github.io/redis/RESP3.html#_5%E3%80%81verbatim-string
示例代码:
import redis
# 建立链接
# 通过参数 protocol=3 支持 RESP3
r = redis.Redis(host='localhost', port=6379, db=0, protocol=3)
# 设置key
r.set('foo', 'bar')
# 获取key的值
print(r.get('foo'))
连接池
import redis
# 建立链接
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
# 设置key
r.set('foo', 'bar')
# 获取key的值
print(r.get('foo'))
异步支持
参考文档: https://redis.readthedocs.io/en/stable/examples/asyncio_examples.html
自动解析结果
import redis
# 建立链接
# decode_responses=True 得加在获取连接池对象的参数里面, 否则不生效
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# 设置key
r.set('foo', 'bar')
# 获取key的值
print(r.get('foo'))
设置过期时间
- ex - 过期时间(秒) 这里过期时间是3秒,3秒后p,键food的值就变成None
- px - 过期时间(豪秒) 这里过期时间是3豪秒,3毫秒后,键foo的值就变成None
示例代码:
import redis
import time
# 建立链接
# decode_responses=True 得加在获取连接池对象的参数里面, 否则不生效
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# 设置key
r.set('foo', 'bar', ex=3)
# 获取key的值
print(r.get('foo'))
time.sleep(3)
print(r.get('foo'))
nx 不存在才创建
nx - 如果设置为True,则只有name不存在时,当前set操作才执行 (新建)
在分布式事务中, 经常用到这个特性.
示例:
import redis
import time
# 建立链接
# decode_responses=True 得加在获取连接池对象的参数里面, 否则不生效
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# 设置key
# nx 不存在, 才新建
r.set('foo', 'bar', nx=True)
r.set('foo', 'bar333', nx=True)
print(r.get('foo'))
# 设置key
# 如果不设置nx, 则每次都会修改
r.set('foo', 'bar')
r.set('foo', 'bar333')
print(r.get('foo'))
使用FastZDPRedisClient
import fastzdp_redis as fzr
# 建立链接
rc = fzr.FastZDPRedisClient()
r = rc.get_client()
r.set("name", "张大鹏")
print(r.get("name"))
使用类封装的get和set方法
底层会自动维护连接池的链接, 更方便.
import fastzdp_redis as fzr
# 建立链接
r = fzr.FastZDPRedisClient()
r.set("name", "张大鹏")
print(r.get("name"))
底层封装的代码如下, 屏蔽细节, 使用更简单.
import redis
class FastZDPRedisClient:
def __init__(
self,
host="127.0.0.1",
port=6379,
db=0,
decode_responses=True
):
# 连接池
self.pool = redis.ConnectionPool(host=host, port=port, db=db, decode_responses=decode_responses)
def get_client(self):
"""
从连接池获取客户端对象
:return: Redis操作的客户端对象
"""
return redis.Redis(connection_pool=self.pool)
def set(self, key, value, ex=None):
"""设置字符串的方法"""
r = self.get_client()
if isinstance(ex, int):
r.set(key, value, ex)
else:
r.set(key, value)
r.close()
def get(self, key):
"""获取字符串的方法"""
r = self.get_client()
value = r.get(key)
r.close()
return value