SMOVE

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

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

相关文章

  • set类型操作3

    SMOVE 语法 将 member 元素从 source 集合移动到 destination 集合。 SMOVE ...

  • SMOVE

    SMOVE 当Source Set包含要移动的成员,且Destination Set不包含要移动的成员时,如果执行...

  • Redis学习笔记--sets类型及操作2

    smove从第一个key 对应的set 中移除member 并添加到第二个对应set 中 通过本例可以看到,mys...

网友评论

      本文标题:SMOVE

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