SDIFF

作者: NotFoundW | 来源:发表于2020-04-16 15:27 被阅读0次

SDIFF

  1. 返回给定集合间的差集
  2. 如果key不存在,视为空集

Command

$ redis-cli.exe -h 127.0.0.1 -p 6379
127.0.0.1:6379> sadd sword 1 2
(integer) 2
127.0.0.1:6379> sadd knife 3 4
(integer) 2
127.0.0.1:6379> sadd gun 1 2
(integer) 2
127.0.0.1:6379> sdiff sword knife
1) "1"
2) "2"
127.0.0.1:6379> sdiff knife sword
1) "3"
2) "4"
127.0.0.1:6379> sdiff sword gun
(empty list or set)
127.0.0.1:6379> exists fakeSetKey
(integer) 0
127.0.0.1:6379> sdiff sword fakeSetKey
1) "1"
2) "2"
127.0.0.1:6379> sdiff fakeSetkey sword
(empty list or set)

Code

func sdiff(c redis.Conn) {
    defer c.Do("DEL", "sword")
    defer c.Do("DEL", "knife")
    defer c.Do("DEL", "gun")
    c.Do("SADD", "sword", 1, 2)
    c.Do("SADD", "knife", 3, 4)
    c.Do("SADD", "gun", 1, 2)
    //  1. If given sets all are not empty set, return the difference set.
    fmt.Println("If given sets all are not empty set, return the difference set.")
    diffMemberList, err := redis.Ints(c.Do("SDIFF", "sword", "knife"))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println(diffMemberList)
    diffMemberList, err = redis.Ints(c.Do("SDIFF", "knife", "sword"))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println(diffMemberList)
    //  2. If given sets all are the same, return the empty list.
    diffMemberList, err = redis.Ints(c.Do("SDIFF", "sword", "gun"))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    if len(diffMemberList) == 0 {
        fmt.Println("If given sets all are the same, return the empty list.")
    }
    //  3. If key doesn't exist, it will be considered an empty set. And return the difference set.
    isExist, _ := c.Do("EXISTS", "fakeSetKey")
    if isExist == 1 {
        c.Do("DEL", "fakeSetKey")
    }
    diffMemberList, err = redis.Ints(c.Do("SDIFF", "sword", "fakeSetKey"))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("Empty set is in the back while compare:", diffMemberList)
    diffMemberList, err = redis.Ints(c.Do("SDIFF", "fakeSetKey", "sword"))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("Empty set is in the front while compare, will return an empty list:", diffMemberList)
}

Output

$ go run main.go 
If given sets all are not empty set, return the difference set.
[1 2]
[3 4]
If given sets all are the same, return the empty list.
Empty set is in the back while compare: [1 2]
Empty set is in the front while compare, will return an empty list: []

相关文章

  • SDIFF

    SDIFF 返回给定集合间的差集 如果key不存在,视为空集 Command Code Output

  • Redis 集合(Set)

    sadd:添加集合元素 scard:查看集合数量 sdiff:集合左交差集 Sdiffstore: 命令将给定集合...

  • Redis 交集、并集、差集

    一、sinter 、sunion 、sdiff redis 支持 Set集合的数据存储,其中有三个比较特殊的方法:...

  • redis有序集合求差集 zdiff?

    我们知道redis集合计算差集的命令是 sdiff。那么有序集合的差集是用 zdiff 命令吗?redis api...

网友评论

      本文标题:SDIFF

      本文链接:https://www.haomeiwen.com/subject/hyorvhtx.html