向爬虫而生---Redis 基石篇4 <拓展Set>

2024-01-03 09:44

本文主要是介绍向爬虫而生---Redis 基石篇4 <拓展Set>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

延伸上一篇:https://blog.csdn.net/m0_56758840/article/details/135349796

挖一挖集合的一些骚操作~

正文:

基本操作:

集合是Redis中的一种数据类型,它具有以下几个基本概念和特性:无重复、无序和集合间的运算。下面是几个常用的集合命令,以及一些案例来说明:

  1. sadd key <value>:将一个或多个成员添加到集合中。

    127.0.0.1:6379> sadd myset 1 2 3
    (integer) 3
    127.0.0.1:6379> sadd myset 3 4
    (integer) 1
    

    在上述示例中,我们使用sadd命令将元素1、2、3添加到名为myset的集合中。首次添加时,返回值为3,表示成功添加了3个成员。然后,我们再次添加元素3和4,但由于集合不允许重复成员,所以返回值为1,表示只有元素4被成功添加到集合中。

  2. srem key <value>:从集合中移除一个或多个成员。

    127.0.0.1:6379> srem myset 2 3
    (integer) 2
    

    在上述示例中,我们使用srem命令从名为myset的集合中移除元素2和3。返回值为2,表示成功移除了2个成员。

  3. scard key:计算集合的大小(基数)。

    127.0.0.1:6379> scard myset
    (integer) 2
    

    在上述示例中,我们使用scard命令计算名为myset的集合的大小。返回值为2,表示集合中有2个成员。

  4. sismember key <value>:判断指定成员是否属于集合。

    127.0.0.1:6379> sismember myset 1
    (integer) 1
    127.0.0.1:6379> sismember myset 5
    (integer) 0
    

    在上述示例中,我们使用sismember命令判断元素1和5是否属于集合。返回值为1表示元素1属于集合,返回值为0表示元素5不属于集合。

  5. srandmember key <count>:从集合中随机获取一个或多个成员。

    127.0.0.1:6379> srandmember myset 2
    1) "1"
    2) "4"
    

    在上述示例中,我们使用srandmember命令从名为myset的集合中随机获取2个成员。返回的成员是随机选择的,每次执行可能得到不同的结果。

  6. spop key:从集合中随机弹出一个成员。

    127.0.0.1:6379> spop myset
    "4"
    

    在上述示例中,我们使用spop命令从名为myset的集合中随机弹出一个成员。弹出的成员是随机选择的,并从集合中移除。

  7. smembers key:获取集合中的所有成员。

    127.0.0.1:6379> smembers myset
    1) "1"
    

    在上述示例中,我们使用smembers命令获取名为myset的集合中的所有成员。(容易造成阻塞,慎用)

通过使用这些集合命令,我们可以对集合进行添加、删除、统计等操作,还可以判断成员是否属于集合,并从集合中随机获取成员或弹出成员。这些命令非常适用于需要对成员进行唯一性管理、随机选择或进行集合间的运算等场景。.


集合的关键用法:

集合的关键用法中,包括了三个关于集合间运算的命令:sdiff(差集)、sinter(交集)、sunion(并集)。

sdiff命令:

  • sdiff key1 [key2 ...],返回给定集合之间的差集。
  • 差集是指在第一个集合中存在,但在其他集合中不存在的成员。
# 创建两个集合
127.0.0.1:6379> sadd set1 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd set2 3 4 5 6
(integer) 4# 计算集合的差集
127.0.0.1:6379> sdiff set1 set2
1) "1"
2) "2"

使用sadd命令创建了两个集合set1set2,分别包含了不同的成员。然后,通过使用sdiff命令计算set1set2之间的差集,即在set1中存在但在set2中不存在的成员,返回结果为12

sinter命令:

  • sinter key1 [key2 ...],返回给定集合之间的交集。
  • 交集是指在所有给定集合中都存在的成员。
# 创建两个集合
127.0.0.1:6379> sadd set1 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd set2 3 4 5 6
(integer) 4# 计算集合的交集
127.0.0.1:6379> sinter set1 set2
1) "3"
2) "4"

使用sadd命令创建了两个集合set1set2,分别包含了不同的成员。然后,通过使用sinter命令计算set1set2之间的交集,即在set1set2中都存在的成员,返回结果为34

sunion命令:

  • sunion key1 [key2 ...],返回给定集合之间的并集。
  • 并集是指将所有给定集合中的成员合并起来,去除重复的成员。
# 创建两个集合
127.0.0.1:6379> sadd set1 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd set2 3 4 5 6
(integer) 4# 计算集合的并集
127.0.0.1:6379> sunion set1 set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"

使用sadd命令创建了两个集合set1set2,分别包含了不同的成员。然后,通过使用sunion命令计算set1set2之间的并集,即将set1set2中所有的成员合并起来,去除重复的成员,返回结果为123456


应用层面:

在Redis的集合数据类型中,可以应用于许多不同的开发场景,例如:

1.标签系统:
集合可以作为标签的容器,用于对数据进行标记和分类。例如,可以将用户标记为"管理员"、"VIP"、"新用户"等,以便更轻松地进行用户分类和查询。 
  •         sadd: 添加标签到集合中。
  •         srem: 从集合中删除指定的标签。
  •         smembers: 获取集合中的所有标签。       
2.实时统计:
通过将数据元素存储在集合中,可以进行实时的统计和计数操作。例如,可以使用集合记录每天访问网站的独立IP,并通过计算集合的大小获取独立访客数。        
  •         sadd: 将数据元素添加到集合中,用于记录每个数据元素的出现。
  •         scard: 获取集合的大小,可用于统计独立数据元素的数量。
3.好友关系:
集合可以用于表示用户之间的好友关系。通过将好友的ID存储在集合中,可以轻松地进行好友列表、共同好友和好友推荐等操作。
  •         sadd: 将好友的ID添加到集合中。
  •         srem: 从集合中删除指定的好友ID。
  •         sismember: 检查指定的用户是否为好友。
  •         smembers: 获取当前用户的所有好友。
4.权限管理:
集合可以用于实现权限管理系统。例如,可以将用户的权限名称存储在一个集合中,然后使用sismember命令来检查用户是否具有特定权限。
  •                 sadd: 将权限名称添加到集合中。
  •                 srem: 从集合中删除指定的权限名称。
  •                 sismember: 检查用户是否具有指定的权限。
5.兴趣匹配:
通过将用户的兴趣爱好存储在集合中,可以通过交集运算来找到具有共同兴趣的用户或进行兴趣匹配。
  •         sadd: 将用户的兴趣爱好添加到集合中。
  •         sinter: 计算两个或多个集合的交集,找到具有共同兴趣的用户。
6.订阅者系统:
集合可以用于存储和管理订阅者信息。例如,将订阅集合中的用户与发布集合中的发布者进行匹配,以实现消息发布和订阅模式。
  •         sadd: 将订阅者的信息添加到集合中。
  •         srem: 从集合中删除指定的订阅者。
  •         smembers: 获取所有订阅者的信息。

以上仅是一些在开发中使用Redis集合的示例,实际上,Redis的集合数据类型非常灵活和多功能,适用于许多实际场景。通过适当地使用集合命令和数据结构,可以构建高效、灵活和可扩展的应用程序

这篇关于向爬虫而生---Redis 基石篇4 <拓展Set>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/565291

相关文章

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

Python中操作Redis的常用方法小结

《Python中操作Redis的常用方法小结》这篇文章主要为大家详细介绍了Python中操作Redis的常用方法,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解一下... 目录安装Redis开启、关闭Redisredis数据结构redis-cli操作安装redis-py数据库连接和释放增

redis防止短信恶意调用的实现

《redis防止短信恶意调用的实现》本文主要介绍了在场景登录或注册接口中使用短信验证码时遇到的恶意调用问题,并通过使用Redis分布式锁来解决,具有一定的参考价值,感兴趣的可以了解一下... 目录1.场景2.排查3.解决方案3.1 Redis锁实现3.2 方法调用1.场景登录或注册接口中,使用短信验证码场

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Redis如何使用zset处理排行榜和计数问题

《Redis如何使用zset处理排行榜和计数问题》Redis的ZSET数据结构非常适合处理排行榜和计数问题,它可以在高并发的点赞业务中高效地管理点赞的排名,并且由于ZSET的排序特性,可以轻松实现根据... 目录Redis使用zset处理排行榜和计数业务逻辑ZSET 数据结构优化高并发的点赞操作ZSET 结

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe