zoukankan      html  css  js  c++  java
  • redis 数据类型为set命令整理以及示例

    数据类型为set。可以保证set内数据唯一。场景:生成订单号,因为要求订单号是绝对不能重复的,所以数据库中要设置为unique索引。但是其实可以通过redis,set来做每天的订单集合。比如A客户的订单号201803041,B客户并发了相同的订单号,但是A客户插入了set集合,B客户插入就会返回0,表示重复,需要再次生成,一定程度上减少了数据库unique的验证。

    #添加到set集合中

    SADD key member [member ...]

    添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.

    如果key 的类型不是集合则返回错误.

    127.0.0.1:6379> SADD set 1 2 3 3 4 4
    (integer) 4
    127.0.0.1:6379> SMEMBERS set
    1) "1"
    2) "2"
    3) "3"
    4) "4" 

    #如果想知道set集合的大小可以使用命令scard

    SCARD key

    127.0.0.1:6379> SCARD set
    (integer) 4
    

      

    #如果想比较集合。命令有sdiff,sdiffstore,sinter,sinterstore,sunion,sunionstore

    SDIFF key [key ...]

    返回一个集合与给定集合的差集的元素.

    127.0.0.1:6379> SADD set1 a
    (integer) 1
    127.0.0.1:6379> SADD set2 a
    (integer) 1
    
    #两个相同的集合或者都是空集合比较
    127.0.0.1:6379> SDIFF set1 set2
    (empty list or set)
    
    #有差值的情况
    127.0.0.1:6379> SADD set1 b
    (integer) 1
    127.0.0.1:6379> SDIFF set1 set2
    1) "b"
    

      

    SDIFFSTORE destination key [key ...]

    该命令类似于 SDIFF, 不同之处在于该命令不返回结果集,而是将结果存放在destination集合中.

    如果destination已经存在, 则将其覆盖重写.可以理解为将比较差集后的结果保存到新的目标集合

    127.0.0.1:6379> SDIFF set1 set2
    1) "b"
    127.0.0.1:6379> SDIFFSTORE set3 set1 set2
    (integer) 1
    127.0.0.1:6379> SMEMBERS set3
    1) "b"

    SINTER key [key ...]

    返回指定所有的集合的成员的交集.官方实例解释

    key1 = {a,b,c,d}
    key2 = {c}
    key3 = {a,c,e}
    SINTER key1 key2 key3 = {c}
    127.0.0.1:6379> SINTER set1 set2
    1) "a"

    SINTERSTORE destination key [key ...]

    和sdiffstore效果类似。将交集写到新的集合。如果集合存在则覆盖重写。

    SUNION key [key ...]

    返回给定的多个集合的并集中的所有成员.

    例如:

    key1 = {a,b,c,d}
    key2 = {c}
    key3 = {a,c,e}
    SUNION key1 key2 key3 = {a,b,c,d,e}

    #如果需要判断值是否在集合中可以使用命令:sismember

    SISMEMBER key member

    返回成员 member 是否是存储的集合 key的成员.

    ##返回值

    • 如果member元素是集合key的成员,则返回1
    • 如果member元素不是key的成员,或者集合key不存在,则返回0

    #返回key集合所有的元素.在上面实例中已经使用。

    SMEMBERS key

    返回key集合所有的元素.

    该命令的作用与使用一个参数的SINTER 命令作用相同.

    SMOVE source destination member

    将member从source集合移动到destination集合中. 对于其他的客户端,在特定的时间元素将会作为source或者destination集合的成员出现.

    如果source 集合不存在或者不包含指定的元素,这smove命令不执行任何操作并且返回0.否则对象将会从source集合中移除,并添加到destination集合中去,如果destination集合已经存在该元素,则smove命令仅将该元素充source集合中移除. 如果source 和destination不是集合类型,则返回错误.

    127.0.0.1:6379> SADD test4 1 2
    (integer) 2
    127.0.0.1:6379> SADD test5 3
    (integer) 1
    127.0.0.1:6379> SMOVE test4 test5 2
    (integer) 1
    127.0.0.1:6379> SMEMBERS test4
    1) "1"
    127.0.0.1:6379> SMEMBERS test5
    1) "2"
    2) "3"

    #如果你想弹出集合中的值可以使用spop。

    SPOP key [count]

    是随机位置弹出set中的值。count计数与redis版本有关

    127.0.0.1:6379> SADD test6 1 2 3 4 6 5 7 8 9 10
    (integer) 10
    127.0.0.1:6379> SPOP test6 3
    1) "1"
    2) "5"
    3) "10"
    127.0.0.1:6379> SMEMBERS test6
    1) "2"
    2) "3"
    3) "4"
    4) "6"
    5) "7"
    6) "8"
    7) "9"

    #随机返回set中指定个数的值

    SRANDMEMBER key [count]

    仅提供key参数,那么随机返回key集合中的一个元素.

    Redis 2.6开始, 可以接受 count 参数,如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.

    仅提供key参数时,该命令作用类似于SPOP命令, 不同的是SPOP命令会将被选择的随机元素从集合中移除, 而SRANDMEMBER仅仅是返回该随记元素,而不做任何操作.

    127.0.0.1:6379> SADD set7 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> SRANDMEMBER set7
    "4"
    127.0.0.1:6379> SRANDMEMBER set7 3
    1) "1"
    2) "2"
    3) "4"
    127.0.0.1:6379> SRANDMEMBER set7 10
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> SRANDMEMBER set7 -10
    1) "4"
    2) "2"
    3) "1"
    4) "2"
    5) "5"
    6) "4"
    7) "1"
    8) "3"
    9) "3"
    10) "1"

    #移除集合中某个值

    SREM key member [member ...]

    在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0.

    如果key的类型不是一个集合,则返回错误.

    127.0.0.1:6379> SMEMBERS set7
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> SREM set7 2
    (integer) 1
    127.0.0.1:6379> SMEMBERS set7
    1) "1"
    2) "3"
    3) "4"
    4) "5"
  • 相关阅读:
    集成TBS(腾讯浏览服务)x5内核的webView
    android studio 华为手机看不到具体的错误日志
    android混淆那些事
    通用工具
    用队列来处理订单以及集合间性能比较
    从.Net版本演变看String和StringBuilder性能之争
    从事件来看委托
    从矢量来看运算符重载
    从foreach语句枚举元素看数组
    从装箱拆箱看泛型
  • 原文地址:https://www.cnblogs.com/gavinjunftd/p/8506768.html
Copyright © 2011-2022 走看看