今天就跟大家聊聊有关Python中怎样操作Redis库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
Redis库在互联网应用的非常普遍,常常作为“缓存层”存在,因为相比MySQL来说它要快非常多,Redis是可以作为应用的唯一数据存储库而不需要MySQL的,但如果搭配MySQL使用,因为性能比MySQL快它常常作为Web应用服务的缓存层,使用时先访问Redis,访问不到再访问MySQL,同时更新到Redis(下次就能访问到这个缓存了)。
Redis主要支持5种数据结构:String: 字符串、Hash: 散列、List: 列表、Set: 集合、Sorted Set: 有序集合,个人非常喜欢Redis就是因为这些数据结构跟Python编程语言的数据容器真的好相似。
接下来我就用一个真实的文章网站怎样使用Redis做下代码演示,总结下各种数据结构的用法:
使用Hash存储文章的(ID、标题)数据;
使用String存储每个文章的访问次数,可以每次加1计数;
使用List存储每个用户的访问文章的历史,按顺序记录;
使用Set存储访问网站的所有用户ID的集合;
使用Sorted Set存储网站的热榜,排序分数就是权重;
引入redis包
如果没有的话,可以用pip install redis安装。
import redis
# 创建链接
redis_conn = redis.Redis(
host='192.168.0.119',
port=6379)
1. 给网站新增几篇文章
# 使用hash,类似map的形式# 存储(Id、标题)数据for idx in range(101, 106): title = f"this is {idx} article title" redis_conn.hset( "articles", str(idx), title )
2. 给用户展示文章列表
# 存储在hash,用hgetall展示所有的文章列表articles = redis_conn.hgetall("articles")for id, title in articles.items(): # 默认返回bytes类型 print(id, title)
看下结果吧:
101 this is 101 article title102 this is 102 article title103 this is 103 article title104 this is 104 article title105 this is 105 article title
也可以查看单个文章:
# 展示单个文章的标题redis_conn.hget("articles", "105")
结果为:
b'this is 105 article title'
3. 用户访问文章则产生行为记录
# 这个函数用到了好多个数据结构def user_visit(uid, article_id): """产生了行为:uid访问了article_id""" # 1. String结构,文章的访问次数加1 redis_conn.incr( f"article_counter_{article_id}") # 2. List结构,记录uid的访问列表 redis_conn.lpush( f"user_visit_{uid}", str(article_id)) # 3. Set结构,记录uid的全站集合 redis_conn.sadd( f"all_visit_uids", str(uid)) # 4. SortedSet结构,文章的热度加1 redis_conn.zincrby( "article_hots", 1, str(article_id))
模拟一下几个用户的访问:
# 模拟3个用户的访问记录
user_visit("uid_01", "101")
user_visit("uid_01", "102")
user_visit("uid_01", "103")
user_visit("uid_02", "102")
user_visit("uid_02", "103")
user_visit("uid_02", "104")
user_visit("uid_03", "103")
user_visit("uid_03", "104")
user_visit("uid_03", "105")
4. 查询文章的访问次数
因为存储在String结构,直接get即可
redis_conn.get(f"article_counter_104")
返回:2
redis_conn.get(f"article_counter_105")
返回:1
5. 展示一个用户的访问历史
因为存储在List,可以用lrange分页查询
redis_conn.lrange(
"user_visit_uid_01", 0, -1)
返回:[b'103', b'102', b'101']
redis_conn.lrange(
"user_visit_uid_03", 0, -1)
返回:[b'105', b'104', b'103']
6. 展示访问全站的用户集合
因为存储在Set,可以用smembers取出所有内容
redis_conn.smembers("all_visit_uids")返回:{b'uid_01', b'uid_02', b'uid_03'}
7. 展示文章热榜以及热度
redis_conn.zrange( "article_hots", 0, -1, withscores=True, desc=True) 返回如下,其实就是每个文章ID和热度值:[(b'103', 3.0), (b'104', 2.0), (b'102', 2.0), (b'105', 1.0), (b'101', 1.0)]
以上就是我使用Python对Redis的操作的一个总结,其中string/list/set/hash大家用的会比较多sorted set用的比较少,但当你遇到热榜、带权重列表等场景时用sorted set会很方便。
代码在github:
https://github.com/peiss/ant-learn-python
看完上述内容,你们对Python中怎样操作Redis库有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。