Python实战:使用redis
💡 Redis和redis-py
Redis(Remote Dictionary Server)是一个开源的缓存数据库,遵守 BSD 协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。
redis-py是Redis 官方提供的Python 客户端库,python可以通过redis-py与 Redis 进行交互,redis-py中提供了 Redis 的多种数据结构的基本操作,如 set、get、incr、decr、rpush、lpush、llen、lrange、ltrim 等。
🔨redis-py的安装
展开剩余89%在使用 redis-py 之前,我们需要确保 redis-py 已安装。如果未安装,可以使用以下命令安装最新版的 redis-py:
pip install redis
🚀 连接Redis
Redis 安装的时候,默认是无密码的,可以通过配置文件设置密码。
python 连接 redis 一般有两种情况(有密码、无密码)。
有密码:
import redis
r=redis.Redis(host="192.168.1.11",port=6379,db=0,password="123456")
无密码:
import redis
r=redis.Redis(host='192.168.1.11', port=6379, db=0)
上面的连接方式属于普通连接,在生产环境中通常使用连接池 (connection pool) 的连接方式,通过连接池管理所有的连接,避免每次建立、释放连接带来的开销。
import redis
pool=redis.ConnectionPool(host='192.168.1.11', port=6379, db=0)
r=redis.Redis(connection_pool=pool)
注意:若出现中文乱码
通常需要在连接时,除了host、port等,还需增加3个配置项:decode_responses=True, charset='UTF-8', encoding='UTF-8'
🚀 常用命令
实例一:set,mset 添加
在 Redis 中设置k-v时,默认不存在就创建,存在就修改
此外 set 设置的时候还可以加入过期时间(类似 cookie 有效期这样),一旦过期之后,再通过 key 去取 value 时,value 的结果为 None。
# 添加
r.set('name1', 'chenge')
# 设置过期时间(秒),5秒过期
r.setex('key1',5,'value1')
# 设置过期时间(毫秒),1000耗秒过期
r.psetex("key2",1000,"value2")
# 不常用,mset是设置多个
r.mset({'key3':'value3', 'key4':'value4'})
实例二:get,获取
r.get('key1')
实例三:列表,List操作
Redis 中的 List 在内存中按照一个 key 对应一个 List 来存储,是有序的字符串列表结构,支持从两端插入和删除元素。
r.lpush("key7",1)
r.lpush("key7",2,3,4)
# 保存在列表中的顺序为4,3,2,1
r.rpush("key8",1)
r.rpush("key8",2,3,4)
# 保存在列表中的顺序为1,2,3,4
# 添加数据到列表
r.rpush('mylist', 'Python', 'Java', 'C++')
# 移除列表最后一个元素
r.rpop('mylist')
# lrange (name, start, end)
# 分片获取元素
# 获取列表所有元素
print(r.lrange('mylist', 0, -1))
实例四:哈希表,Hash操作
Redis 中的 hash 在内存中类似一个 key 对应一个 dict 来存储。Redis 哈希表是一个键值对集合,可以用于存储和读取对象字段,比如用户信息、文章信息等。Redis 提供了一系列的命令如 hset、hget、hmset、hmget、hincrby 等用于操作哈希表。
# 写入哈希表
r.hset('user', 'name', 'Tom')
r.hset('user', 'age', 18)
# 获取哈希表指定键的值
print(r.hget('user','name'))
# 获取哈希表所有键值对
print(r.hgetall('user'))
实例五:集合,Set操作
Redis 集合是一组无序集合,支持添加、删除和检查元素是否存在等操作。Set 集合可以理解为不允许重复的列表。Redis 提供了一系列的命令如 sadd、 a.smanager.cn/u/wm5A2.PHP srem、smembers、sismember 等。
# 添加元素到集合
r.sadd('myset', 'A', 'B', 'C')
# 判断元素是否存在于集合
print(r.sismember('myset', 'A'))
# 获取集合所有元素
print(r.smembers('myset'))
实例六:有序集合,zset
有序集合是在集合的基础上,为每一个元素排序。每个元素都有一个对应的分数(score),可以根据分数排序。Redis 提供了一系列的命令如 zadd、zscore、zrange、zrem 等。
zadd(name, 55t.smanager.cn/u/gdYj3.PHP mapping),其中 name 为有序集合名,mapping 为 dict 类型的键 - 值对
zcard(name),获取有序集合内元素的数量
zcount(88a.smanager.cn/u/62FH9.PHP name, min, max),# 获取有序集合中分数在 [min,max] 之间的个数
# 添加元素到有序集合
r.zadd('mysortedset', {'A': 1, 'B': 2, 'C': 3})
# 获取有序集合元素
print(new.smanager.cn/u/y6iqB.PHP r.zrange('mysortedset', 0, -1, withscores=True))
📈 高级功能
Redis 支持发布/订阅模式:
import redis
# 连接 Redis 服务器
r = redis.Redis(wap.smanager.cn/u/hs7HF.PHP host='192.168.11.123', port=6379, db=0)
# 往通道 channel1 上,发布消息
r.publish(smanager.cn/u/Ux8gv.PHP 'channel1', 'hello python')
# 订阅消息
p = r.pubsub()
p.subscribe(www.smanager.cn/u/420x6.PHP 'channel1')
for message in p.listen():
print(message)
💪 总结
Redis 可以用于各种不同的应用场景:
缓存数据库 (Cache Database):提高应用程序的性能、响应速度,同时减少DB的访问压力。 发布/订阅系统 (Messaging System):支持不同的应用程序之间的数据交换。 分布式锁 (Distributed Lock ):用于多个客户端之间的并发操作时的同步控制,实现数据的一致性。 实时榜单记录 (Real-time Ranking):Redis 的有序性易于实现实时榜单统计或微博点赞等。让我们一起用Python操作Redis数据库吧!
发布于:重庆市