Python与Redis的交互主要通过redis-py库实现,以下是详细实现方法和示例代码:
1. 环境准备- 安装Redis服务:确保Redis服务器已安装并运行(如Ubuntu下sudo apt install redis-server)。
- 安装Python库:pip3 install redis
2. 基本连接与操作连接Redisimport redis# 创建连接对象(参数可选,默认host='localhost', port=6379, db=0)r = redis.Redis( host='127.0.0.1', port=6379, db=0, password='123456', # 如果有密码 decode_responses=True # 自动解码返回值为字符串)通用命令示例# 获取所有键print(r.keys('*')) # 返回列表,如 [b'uname', b'a']# 检查键是否存在print(r.exists('name')) # 返回1(存在)或0(不存在)3. 数据类型操作字符串(String)# 设置键值对(可设置过期时间,单位秒)r.set('uname', 'aid2102', ex=60) # 60秒后过期# 获取值(需解码字节串)print(r.get('uname').decode()) # 输出: aid2102# 批量操作r.mset({'a': 100, 'b': 200})print(r.mget(['a', 'b'])) # 输出: [b'100', b'200']列表(List)# 左侧插入多个元素r.lpush('pylk1', 100, 200, 300)# 获取列表所有元素(0到-1表示全部)print(r.lrange('pylk1', 0, -1)) # 输出: [b'300', b'200', b'100']4. 生产者-消费者模型生产者(product.py)import redisr = redis.Redis(password='123456')task = 'sendMail_aid2102_mzg_helloworld'r.lpush('lst:tasks', task) # 任务入队消费者(consumer.py)import redisr = redis.Redis(password='123456')while True: # 阻塞式弹出任务(超时3秒) task = r.brpop('lst:tasks', timeout=3) if task: # task格式: (b'lst:tasks', b'sendMail_...') task_data = task[1].decode() print("处理任务:", task_data) # 解析任务类型 if task_data.startswith('sendMail'): print("执行发送邮件...") else: print("无任务")5. 注意事项- 返回值解码:默认返回字节串(bytes),需调用.decode()或设置decode_responses=True。
- 异常处理:建议捕获redis.ConnectionError等异常。
- 连接池:高频操作时使用连接池提升性能:pool = redis.ConnectionPool(host='127.0.0.1', password='123456')r = redis.Redis(connection_pool=pool)
6. 扩展功能- 发布/订阅:使用pubsub()实现消息通知。
- 事务:通过pipeline()批量执行命令。
- Lua脚本:使用eval()执行复杂逻辑。
通过以上代码,Python可以高效地与Redis交互,适用于缓存、消息队列等场景。更多高级用法可参考
redis-py官方文档
。