SDIFF

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: []
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Redis从入门到精通:中级篇 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二...
    叨唧唧的阅读 4,050评论 0 0
  • Key(键) 1. DEL 时间复杂度:O(N), N 为被删除的 key 的数量。删除单个字符串类型的 key...
    one_zheng阅读 3,607评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,025评论 0 5
  • 教你看懂redis配置 – 安全 我们可以要求redis客户端在向redis-server发送请求之前,先进行密码...
    烨枫_邱阅读 2,435评论 0 1
  • 数据类型 String 字符串二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列...
    MaxHongxi阅读 3,134评论 0 0

友情链接更多精彩内容