SDIFF
- 返回给定集合间的差集
- 如果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: []