redis的set数据类型相关命令介绍及使用

set简介

redis集合set类型和list列表类型类似,都可以用来存储多个字符串元素的集合。但是和list不同的是set集合当中不允许重复的元素。而且set集合当中元素是没有顺序的,不存在元素下标。
redis的set类型是使用哈希表构造的,它支持集合内的增删改查,并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。
集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

添加命令

  1. sadd key member [member ...]
    将一个或多个值加入到集合中,返回值数字,添加成功的个数,如果元素已经存在,则不会添加
    127.0.0.1:6379> sadd name zhangsan lisi
    (integer) 2
    

查询命令

  1. scard key
    获取集合中的元素个数
    127.0.0.1:6379> scard name
    (integer) 2
    
  2. smembers key
    返回集合中的所有成员
    127.0.0.1:6379> smembers name
    1) "zhangsan"
    2) "lisi"
    
  3. sismember key member
    判断 member 元素是否是集合 key 的成员,1表示存在 0表示不存在或者该key本身就不存在
    127.0.0.1:6379> sismember name zhangsan
    (integer) 1
    127.0.0.1:6379> sismember name wangwu
    (integer) 0
    
  4. srandmember key [count]
    随机返回集合中一个或多个元素,默认随机1个
127.0.0.1:6379> srandmember name
"zhangsan"
127.0.0.1:6379> srandmember name
"lisi"
127.0.0.1:6379> srandmember name 2
1) "zhangsan"
2) "lisi"
  1. sscan key cursor [MATCH pattern] [COUNT count]
    迭代集合中的元素
    cursor:游标,HSCAN 命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 HSCAN 命令的游标参数, 以此来延续之前的迭代过程。当 SCAN 命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束

MATCH pattern:匹配的模式,和 KEYS 命令一样, 增量式迭代命令也可以通过提供一个 glob 风格的模式参数, 让命令只返回和给定模式相匹配的元素, 这一点可以通过在执行增量式迭代命令时, 通过给定 MATCH 参数来实现

count:指定从数据集里返回多少元素,默认值为 10 。虽然增量式迭代命令不保证每次迭代所返回的元素数量, 但我们可以使用 COUNT 选项, 对命令的行为进行一定程度上的调整。 基本上, COUNT 选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素
java 127.0.0.1:6379> sscan name 0 match z* 1) "0" 2) 1) "zhangsan" 127.0.0.1:6379> sscan name 0 match z* count 1 1) "3" 2) 1) "zhangsan"

移动/删除命令

  1. smove source destination member
    将 member 元素从 source 集合移动到 destination 集合,成功返回1=
    127.0.0.1:6379> smove name name_bak lisi
    (integer) 1
    127.0.0.1:6379> smove name name_bak lisi
    (integer) 0
    127.0.0.1:6379> smembers name_bak
    1) "lisi"
    
  2. spop key [count]
    移除并返回集合中的一个随机元素,集合无元素时返回(empty list or set)
    127.0.0.1:6379> spop name 1
    1) "zhangsan"
    
  3. srem key member [member ...]
    移除集合中指定的一个或多个成员
    127.0.0.1:6379> sadd name zhangsan lisi wangwu
    (integer) 3
    127.0.0.1:6379> srem name lisi wangwu
    (integer) 2
    127.0.0.1:6379> smembers name
    1) "zhangsan"
    

集合运算命令

差集运算

  1. sdiff key [key ...]
    返回第一个集合与其他集合之间的差异。
    127.0.0.1:6379> sadd num1 1 2 3 5 6 8 9 12
    (integer) 8
    127.0.0.1:6379> sadd num2 2 3 4 6 9 10 11
    (integer) 7
    127.0.0.1:6379> sdiff num1 num2
    1) "1"
    2) "5"
    3) "8"
    4) "12"
    
  2. sdiffstore destination key [key ...]
    返回给定所有集合的差集并存储在 destination 中
    127.0.0.1:6379> sdiffstore num3 num1 num2
    (integer) 4
    127.0.0.1:6379> smembers num3
    1) "1"
    2) "5"
    3) "8"
    4) "12"
    

交集运算

  1. sinter key [key ...]
    返回给定所有集合的交集
    127.0.0.1:6379> sinter num1 num2
    1) "2"
    2) "3"
    3) "6"
    4) "9"
    
  2. sinterstore destination key [key ...]
    返回给定所有集合的交集并存储在 destination 中
    127.0.0.1:6379> sinterstore num4 num1 num2
    (integer) 4
    127.0.0.1:6379> smembers num4
    1) "2"
    2) "3"
    3) "6"
    4) "9"
    

并集运算

  1. sunion key [key ...]
    返回所有给定集合的并集
    127.0.0.1:6379> sunion num1 num2
     1) "1"
     2) "2"
     3) "3"
     4) "4"
     5) "5"
     6) "6"
     7) "8"
     8) "9"
     9) "10"
    10) "11"
    11) "12"
    
  2. sunionstore destination key [key ...]
    所有给定集合的并集存储在 destination 集合中
    127.0.0.1:6379> sunionstore num5 num1 num2
    (integer) 11
    127.0.0.1:6379> smembers num5
     1) "1"
     2) "2"
     3) "3"
     4) "4"
     5) "5"
     6) "6"
     7) "8"
     8) "9"
     9) "10"
    10) "11"
    11) "12"
    

应用场景

  1. 好友、关注、粉丝、感兴趣的人集合:
    1)sinter命令可以获得A和B两个用户的共同好友;
    2)sismember命令可以判断A是否是B的好友;
    3)scard命令可以获取好友数量;
    4)关注时,smove命令可以将B从A的粉丝集合转移到A的好友集合

  2. 首页展示随机:美团首页有很多推荐商家,但是并不能全部展示,set类型适合存放所有需要展示的内容,而srandmember命令则可以从中随机获取几个。

  3. 存储某活动中中奖的用户ID ,因为有去重功能,可以保证同一个用户不会中奖两次。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值