Redis set的用法(转载)

 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 获取集合里面的所有key
  • SMOVE
    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值