安装 redis-py
首先,你需要安装 redis-py
库:
pip install redis
连接到 Redis
import redis# 创建 Redis 连接
r = redis.Redis(host='localhost', port=6379, db=0)
字符串操作
-
设置值
r.set('key', 'value')
-
获取值
value = r.get('key') print(value.decode('utf-8')) # Redis 返回的值是字节类型,需要解码为字符串
-
设置带过期时间的值
r.setex('key', 3600, 'value') # 过期时间为 3600 秒
-
获取并设置值(返回旧值)
old_value = r.getset('key', 'new_value')
-
递增
r.incr('key') # 增加整数值 r.incrby('key', 5) # 增加指定的整数值
-
递减
r.decr('key') # 减少整数值 r.decrby('key', 5) # 减少指定的整数值
列表操作
-
添加元素到列表的左侧
r.lpush('mylist', 'element')
-
添加元素到列表的右侧
r.rpush('mylist', 'element')
-
获取列表中的所有元素
elements = r.lrange('mylist', 0, -1) # 获取所有元素
-
删除列表中的元素
r.lrem('mylist', 1, 'element') # 从列表中删除指定值的元素
集合操作
-
添加元素到集合
r.sadd('myset', 'element')
-
获取集合中的所有元素
elements = r.smembers('myset')
-
删除集合中的元素
r.srem('myset', 'element')
-
集合的交集
intersection = r.sinter('set1', 'set2')
-
集合的并集
union = r.sunion('set1', 'set2')
-
集合的差集
difference = r.sdiff('set1', 'set2')
哈希操作
-
设置哈希表字段的值
difference = r.sdiff('set1', 'set2')
-
获取哈希表字段的值
value = r.hget('myhash', 'field')
-
获取哈希表中的所有字段和值
fields = r.hgetall('myhash')
-
删除哈希表中的字段
r.hdel('myhash', 'field')
有序集合操作
-
添加元素到有序集合
r.zadd('myzset', {'element': 1.0})
-
获取有序集合中的元素
elements = r.zrange('myzset', 0, -1, withscores=True) # 获取所有元素及其分数
-
删除有序集合中的元素
r.zrem('myzset', 'element')
发布/订阅
-
订阅频道
pubsub = r.pubsub() pubsub.subscribe('my-channel')
-
发布消息
r.publish('my-channel', 'Hello, Redis!')
-
处理接收到的消息
for message in pubsub.listen():print(message)
事务
-
使用事务执行多个命令
with r.pipeline() as pipe:pipe.set('key1', 'value1')pipe.set('key2', 'value2')responses = pipe.execute()
键管理
-
检查键是否存在
exists = r.exists('key')
-
删除键
r.delete('key')
-
设置键的过期时间
r.expire('key', 3600) # 过期时间为 3600 秒
-
获取键的剩余过期时间
ttl = r.ttl('key')
高级用法
连接池
1. 连接池的定义
连接池是一个事先创建并维护的一组连接的集合。应用程序从连接池中获取连接,而不是每次操作都重新建立连接。连接使用完毕后,连接会被返回到连接池中,而不是被关闭。这样可以重用现有连接,提高系统的性能和资源利用率。
2. 连接池的工作原理
初始化:连接池在创建时,会建立一定数量的连接到目标服务(如 Redis、数据库等),并将这些连接存储在池中。
获取连接:当应用程序需要进行数据库操作时,从连接池中获取一个连接。连接池会提供一个空闲的连接,如果没有空闲连接,可能会等待或创建新的连接(如果未达到最大连接数)。
使用连接:应用程序使用从连接池中获取的连接进行操作。
归还连接:操作完成后,连接不会被关闭,而是被归还到连接池中,供其他操作使用。
管理连接:连接池会管理连接的生命周期,包括连接的创建、回收、维护等。有些连接池还会进行连接的健康检查和重连处理。
redis-py
支持使用连接池来优化连接管理:
import redis# 创建连接池
pool = redis.ConnectionPool(host='localhost',port=6379,db=0,max_connections=10,timeout=5,decode_responses=True
)# 使用连接池创建 Redis 实例
r = redis.Redis(connection_pool=pool)# 执行 Redis 操作
r.set('key', 'value')
print(r.get('key')) # 输出: valuer.lpush('mylist', 'element')
print(r.lrange('mylist', 0, -1)) # 输出: [b'element']# 关闭连接池(可选)
pool.disconnect()
使用事务的块(Pipeline)
Pipeline 允许你将多个命令批量发送到 Redis 服务器以提高性能:
with r.pipeline() as pipe:pipe.set('key1', 'value1')pipe.set('key2', 'value2')pipe.get('key1')responses = pipe.execute()