温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中怎样操作Redis库

发布时间:2021-07-27 15:56:51 来源:亿速云 阅读:141 作者:Leah 栏目:大数据

今天就跟大家聊聊有关Python中怎样操作Redis库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Redis库在互联网应用的非常普遍,常常作为“缓存层”存在,因为相比MySQL来说它要快非常多,Redis是可以作为应用的唯一数据存储库而不需要MySQL的,但如果搭配MySQL使用,因为性能比MySQL快它常常作为Web应用服务的缓存层,使用时先访问Redis,访问不到再访问MySQL,同时更新到Redis(下次就能访问到这个缓存了)。

Redis主要支持5种数据结构:String: 字符串、Hash: 散列、List: 列表、Set: 集合、Sorted Set: 有序集合,个人非常喜欢Redis就是因为这些数据结构跟Python编程语言的数据容器真的好相似。

接下来我就用一个真实的文章网站怎样使用Redis做下代码演示,总结下各种数据结构的用法:

  1.  使用Hash存储文章的(ID、标题)数据;

  2. 使用String存储每个文章的访问次数,可以每次加1计数;

  3. 使用List存储每个用户的访问文章的历史,按顺序记录;

  4. 使用Set存储访问网站的所有用户ID的集合;

  5. 使用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库有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI