Redis集合学习记录

这篇博客详细介绍了Redis集合的常用命令,包括SADD、SREM、SMOVE、SMEMBERS等,以及集合的交集、并集、差集操作。Redis集合是无序且不包含重复元素的数据结构,适用于社交功能如点赞、关注列表等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis的集合是一种无序的结构,它之中存储的是一些互不相同的元素,它不像Redis列表结构那样有序排列,故它也没有索引取值、队列、栈的功能。

命令

SADD
SADD set element [element ...]

将一个或多个元素添加到集合中,若集合中已存在要添加的元素,则添加时的对应元素会被忽略,该命令最终返回添加成功的元素数量。

SREM
SREM set element [element ...]

将一个或多个元素从集合中移除,该命令返回移除成功的元素数量,该命令将忽略不存在的元素,只移除存在的元素。

SMOVE
SMOVE source_set target_set element

将一个元素从一个集合移动到另一个集合。该命令移动成功返回1,移动失败返回0。若源集合中不存在该元素,则移动失败(返回0);若目标集合中已有该元素,则目标集合中的元素不变(也相当于目标集合中的对应元素被覆盖了一遍),但源集合中的元素已经被移走了(命令返回1)。

SMEMBERS
SMEMBERS set

获得集合中的所有元素。

SCARD
SCARD set

得到集合中的元素个数,即该集合的长度。

SISMEMBER
SISMEMBER set element

判断给定的元素是否存在于集合当中。该命令返回1表示存在,返回0表示不存在。

SRANDMEMBER
SRANDMEMBER set [count]

随机返回集合中指定数量的元素,若不指定count,则默认返回一个。注意,该命令只会返回对应的元素,集合中对应的元素还是存在的,即不会被移除。若count是正数,则返回count个不重复的元素;若count大于集合的长度,则返回集合中的所有元素;若count为负数,则返回count的绝对值个元素,但这count绝对值个元素可能有重复的,这时,若count的绝对值大于集合的长度,则还是会返回count绝对值个元素,因为可以允许返回的元素重复。

SPOP
SPOP key [count]

该命令可以与上面的SRANDMEMBER命令作对比。该命令也是返回指定数量的元素,但是返回后,集合中对应的元素也被移除了。该命令的指定数量只能为正数。

SINTER SINTERSTORE
SINTER set [set ...]
SINTERSTORE destination_key set [set ...]

SINTTER命令对给定的所有集合求交集,然后返回这个交集包含的元素。
SINTERSTORE这个命令对所有的集合求交集,然后将对应的交集计算结果存储到给定的键里面,该命令执行之前会先删除给定的键。该命令返回交集计算结果的元素数量。

SUNION SUNIONSTORE
SUNION set [set ...]
SUNIONSTORE destination_key set [set ...]

对给定的所有集合求并集。其余操作与上面的交集命令类似。

SDIFF SDIFFSTORE
SDIFF set [set ...]
SDIFFSTORE destination_key set [set ...]

对给定的所有集合从左向右依次求差集,例如命令“SDIFF s1 s2 s3”,则它对应的操作是:(s1-s2)-s3。其余的操作与交集命令类似。

总结

集合是一种存储不重复元素的无序结构。正是因为这种特性,它的功能经常能用于社交方面,比如一条微博的点赞(获取点赞人SMEMBERS、获取点赞数SCARD,添加点赞SADD、移除点赞SREM);微博的关注列表、粉丝列表;抽奖(SRANDMEMBER、SPOP)等。
另外要注意SRANDMEMBER与SCARD的区别。
最后,对于求交集、并集、差集运算会使用大量的计算资源,故应尽量将计算结果存储起来以在后面复用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值