SMOVE
- 当Source Set包含要移动的成员,且Destination Set不包含要移动的成员时,如果执行成功,成员从Source Set移动到Destination Set的最前面,并返回1。
- 当Source Set和Destination Set都包含要移动的成员时,则仅仅从Source Set移除掉该成员,并返回1。
- 当Source Set不包含要移动的成员时,返回0。
Command
$ redis-cli.exe -h 127.0.0.1 -p 6379
127.0.0.1:6379> sadd spider 1 2 3
(integer) 3
127.0.0.1:6379> sadd moth 3 4 5
(integer) 3
127.0.0.1:6379> smove spider moth 2
(integer) 1
127.0.0.1:6379> smembers spider
1) "1"
2) "3"
127.0.0.1:6379> smembers moth
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> smove spider moth 3
(integer) 1
127.0.0.1:6379> smembers spider
1) "1"
127.0.0.1:6379> smembers moth
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> smove spider moth 10
(integer) 0
Code
func smove(c redis.Conn) {
defer c.Do("DEL", "spider")
defer c.Do("DEL", "moth")
c.Do("SADD", "spider", 1, 2, 3)
c.Do("SADD", "moth", 3, 4, 5)
// 1. If source set has the member and destination set doesn't, will move this member from source set
// to the head of destination set. If successfully, return 1.
moveResult, err := c.Do("SMOVE", "spider", "moth", 2)
if err != nil {
colorlog.Error(err.Error())
return
}
fmt.Println("source set has the member and destination set doesn't, will return:", moveResult)
members, _ := redis.Strings(c.Do("SMEMBERS", "spider"))
fmt.Println("After smove, members of spider are as following:")
for _, v := range members {
fmt.Println(v)
}
members, _ = redis.Strings(c.Do("SMEMBERS", "moth"))
fmt.Println("After smove, members of moth are as following:")
for _, v := range members {
fmt.Println(v)
}
// 2. If source set and destination set both have the member, will only remove this member from source set.
// If successfully, return 1.
moveResult, err = c.Do("SMOVE", "spider", "moth", 3)
if err != nil {
colorlog.Error(err.Error())
return
}
fmt.Println("source set and destination set both have the member, will return:", moveResult)
members, _ = redis.Strings(c.Do("SMEMBERS", "spider"))
fmt.Println("After smove, members of spider are as following:")
for _, v := range members {
fmt.Println(v)
}
// 3. If source set doesn't have the member, will return 0.
moveResult, err = c.Do("SMOVE", "spider", "moth", 10)
if err != nil {
colorlog.Error(err.Error())
return
}
fmt.Println("source set doesn't have the member, will return:", moveResult)
}
Output
$ go run main.go
source set has the member and destination set doesn't, will return: 1
After smove, members of spider are as following:
1
3
After smove, members of moth are as following:
2
3
4
5
source set and destination set both have the member, will return: 1
After smove, members of spider are as following:
1
source set doesn't have the member, will return: 0
网友评论