SMOVE

2020-04-16  本文已影响0人  NotFoundW

SMOVE

  1. 当Source Set包含要移动的成员,且Destination Set不包含要移动的成员时,如果执行成功,成员从Source Set移动到Destination Set的最前面,并返回1。
  2. 当Source Set和Destination Set都包含要移动的成员时,则仅仅从Source Set移除掉该成员,并返回1。
  3. 当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
上一篇 下一篇

猜你喜欢

热点阅读