玩Python这么久了,要说哪个库让我印象最深,那非redis-py莫属了。这可是Python连接Redis的第一神器,不光用着顺手,性能还贼快。今天就给大家详细唠唠这个神器,看看它到底有多厉害。
装个redis-py真不费事,一行命令就搞定:
pip install redis
装完就能直接用,也不用折腾那些乱七八糟的配置。
想跟Redis建立连接,有好几种玩法:
import redis
# 最基础的连接方式
r = redis.Redis(host='localhost', port=6379, db=0)
# 用URI也行
r = redis.from_url('redis://localhost:6379/0')
# 连接池大法好
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
温馨提示 :用连接池准没错!它能帮你管理连接资源,避免重复创建连接浪费资源。
redis-py对Redis的五大数据类型支持得可谓是面面俱到:
# 字符串操作
r.set('name', '柏舟')
r.get('name')
# 列表操作
r.lpush('languages', 'Python')
r.lpush('languages', 'Java')
r.lrange('languages', 0, -1)
# 集合操作
r.sadd('skills', 'coding')
r.smembers('skills')
# 哈希表操作
r.hset('user:1', 'name', '柏舟')
r.hset('user:1', 'age', '18')
r.hgetall('user:1')
# 有序集合操作
r.zadd('ranking', {'Python':100, 'Java':95})
r.zrange('ranking', 0, -1, withscores=True)
要说redis-py最秀的地方,那就得是它的管道(Pipeline)技术了:
# 使用管道一次性执行多个命令
with r.pipeline() as pipe:
pipe.set('name', '柏舟')
pipe.sadd('skills', 'Redis')
pipe.zadd('ranking', {'Redis':99})
pipe.execute()
用管道可以把多个命令打包一次性发给Redis执行,这样能大大提升性能。我测试过,性能能提升好几倍呢!
redis-py的异常处理设计得挺人性化:
try:
r.set('test', 'value')
except redis.ConnectionError:
print('连接出问题了,快看看Redis服务器是不是挂了!')
except redis.RedisError as e:
print(f'别的错误:{e}')
温馨提示 :记得处理好异常,不然程序容易莫名其妙就崩溃了。
redis-py的事务支持也是相当给力:
# 开启事务
with r.pipeline() as pipe:
try:
pipe.watch('account_balance')
# 执行一系列操作
pipe.multi()
pipe.set('account_balance', 1000)
pipe.execute()
except redis.WatchError:
print('有人动了我们正在处理的数据!')
写代码的时候记得加上事务,不然多个程序一起操作数据容易乱套。
redis-py这个库是真的香,用了这么久我都没觉得腻。它不光能满足日常开发需求,还能应付高并发的场景。不管是做缓存、计数器,还是消息队列,都是把好手。真要说缺点,可能就是文档有点简略,不过问题不大,常用的功能都能找到例子。