Redis set的用法(转载)

xiaoxiao2021-02-28  130

 Set(集合)

可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

应用场景

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

又或者在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。

相关命令

SADD SADD key member [member ...] 添加一个或者多个元素到集合(set)里SACRD SCARD key 获取集合里面的元素数量SDIFF SDIFF key [key ...] 获得队列不存在的元素SDIFFSTORE SDIFFSTORE destination key [key ...] 获得队列不存在的元素,并存储在一个关键的结果集SINTER SINTER key [key ...] 获得两个集合的交集SINTERSTORE SINTERSTORE destination key [key ...] 获得两个集合的交集,并存储在一个集合中SISMEMBER SISMEMBER key member 确定一个给定的值是一个集合的成员SMEMBERS SMEMBERS key 获取集合里面的所有keySMOVE SMOVE source destination member 移动集合里面的一个key到另一个集合SPOP SPOP key [count] 获取并删除一个集合里面的元素SRANDMEMBER SRANDMEMBER key [count] 从集合里面随机获取一个元素SREM SREM key member [member ...] 从集合里删除一个或多个元素,不存在的元素会被忽略SUNION SUNION key [key ...] 添加多个set元素SUNIONSTORE SUNIONSTORE destination key [key ...] 合并set元素,并将结果存入新的set里面SSCAN SSCAN key cursor [MATCH pattern] [COUNT count] 迭代set里面的元素

使用示例

redis> SADD myset "Hello" (integer) 1 redis> SADD myset "World" (integer) 1 redis> SMEMBERS myset 1) "World" 2) "Hello" redis> SADD myset "one" (integer) 1 redis> SISMEMBER myset "one" (integer) 1 redis> SISMEMBER myset "two" (integer) 0

使用集合数据结构的典型用例是朋友名单的实现:

redis 127.0.0.1:6379> sadd friends:leto ghanima paul chani jessica (integer) 4 redis 127.0.0.1:6379> sadd friends:duncan paul jessica alia (integer) 3 redis 127.0.0.1:6379> sismember friends:leto jessica (integer) 1 #不管一个用户有多少个朋友,我们都能高效地(O(1)时间复杂度)识别出用户X是不是用户Y的朋友 redis 127.0.0.1:6379> sismember friends:leto vladimir (integer) 0 redis 127.0.0.1:6379> sinter friends:leto friends:duncan #我们可以查看两个或更多的人是不是有共同的朋友 1) "paul" 2) "jessica" redis 127.0.0.1:6379> sinterstore friends:leto_duncan friends:leto friends:duncan # 可以在一个新的关键字里存储结果 (integer) 2
转载请注明原文地址: https://www.6miu.com/read-28393.html

最新回复(0)