学习-3

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

Decr和Incr相关命令

Code

func DecrAndIncr(c redis.Conn) {
    colorlog.Info("Func DecrAndIncr()...")
    c.Do("SET", "myNumber", "123")
    //  Decr 1
    decrOneResult, err := c.Do("DECR", "myNumber")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("After decr 1, the value of myNumber is:", decrOneResult)
    //  Decr any
    decrAnyResult, err := c.Do("DECRBY", "myNumber", 2)
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // here result should be 120
    fmt.Println("After decr 2, the value of myNumber is:", decrAnyResult)
    //  Incr 1
    incrOneResult, err := c.Do("INCR", "myNumber")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // here result should be 121
    fmt.Println("After incr 1, the value of myNumber is:", incrOneResult)
    //  Incr any
    incrAnyResult, err := c.Do("INCRBY", "myNumber", 3)
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // here result should be 124
    fmt.Println("After incr 3, the value of myNumber is:", incrAnyResult)
    //  Incr float
    incrAnyFloatResult,err:=redis.Float64(c.Do("INCRBYFLOAT","myNumber",0.24))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // here result should be 124.24
    fmt.Println("After incr float 0.24, the value of myNumber is:", incrAnyFloatResult)
}

Output

1.png

Strlen和Append命令

Code

func StrLenAndAppend(c redis.Conn) {
    colorlog.Info("Func StrLenAndAppend()...")
    c.Do("SET", "newStr", "original")
    originalLength, err := c.Do("STRLEN", "newStr")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // here length should be 8
    fmt.Println(originalLength)
    //  Append a new string to the end of original string
    appendLength, err := c.Do("APPEND", "newStr", "Append")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // here length should be 14
    fmt.Println(appendLength)
    //  and newStr should be "originalAppend"
    result, _ := redis.String(c.Do("Get", "newStr"))
    fmt.Println(result)
}

Output

2.png

getrange和setrange命令

Code

func GetAndSetRange(c redis.Conn) {
    colorlog.Info("Func GetAndSetRange()...")
    c.Do("SET", "swan", "black")
    //get sub string of white from 0 to 1: bl
    resultGetRange, err := redis.String(c.Do("GETRANGE", "swan", 0, 1))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("get sub string of white from 0 to 1:", resultGetRange)
    // get sub string of white from end to end : k
    resultGetRangeEnd, err := redis.String(c.Do("GETRANGE", "swan", 4, 4))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("get sub string of white from end to end:", resultGetRangeEnd)
    // get sub string of white from end to end+1 or end+more: k
    resultGetRangeEndMore, err := redis.String(c.Do("GETRANGE", "swan", 4, 5))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("get sub string of white from end to end+1:", resultGetRangeEndMore)

    //  only set a char on a index
    //  If set successfully, will return new string's length.
    setOneResult, err := c.Do("SETRANGE", "swan", 0, "c")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // new length should be 5. set "c" char on index 0 : clack
    fmt.Println("after set c char on index 0, new string's length is:", setOneResult)
    newStr, _ := redis.String(c.Do("GET", "swan"))
    fmt.Println("after set c char on index 0, new string is:", newStr)
    //  set multiple chars on index 0
    setTwoResult, err := c.Do("SETRANGE", "swan", 0, "white")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    // new length should be 5. set "white" chars on index 0 : white
    fmt.Println("after set 'white' chars on index 0, new string's length is:", setTwoResult)
    newStr, _ = redis.String(c.Do("GET", "swan"))
    fmt.Println("after set 'white' chars on index 0, new string is:", newStr)
    //  set a char/chars on length index, will return new string's length. And append the char/chars to the end.
    oldLength := len(newStr)
    setEndResult, err := c.Do("SETRANGE", "swan", oldLength, "Bird")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    //  new length should be 9. set "Bird" chars on length index: whiteBird
    fmt.Println("after set 'Bird' chars on length index, new string's length is:", setEndResult)
    newStr, _ = redis.String(c.Do("GET", "swan"))
    fmt.Println("after set 'Bird' chars on length index, new string is:", newStr)
    // set a char/chars on length+1 index, will return new string's length.
    // And will append a space to the end, then append the char/chars to the end.
    oldLength = len(newStr)
    setFurtherResult, err := c.Do("SETRANGE", "swan", oldLength+1, "Fly")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    //  new length should be 13. set "Fly" chars on length+1 index: whiteBirdFly
    fmt.Println("after set 'Fly' chars on length+1 index, new string's length is:", setFurtherResult)
    newStr, _ = redis.String(c.Do("GET", "swan"))
    fmt.Println("after set 'Fly' chars on length+1 index, new string is:", newStr)
}

Output

3.png

mset和mget命令

Code

func MsetAndMget(c redis.Conn) {
    colorlog.Info("Func msetAndMget()...")
    _, err := c.Do("MSET", "m1", "v1", "m2", "v2", "m3", "v3")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    mgetResult, err := redis.Strings(c.Do("MGET", "m1", "m2", "m3"))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    for _, v := range mgetResult {
        fmt.Println(v)
    }
}

Output

4.png

Dump和Restore命令

Code

func DumpAndRestore(c redis.Conn) {
    colorlog.Info("Func DumpAndRestore()...")
    c.Do("SET", "fish", "long")
    // if key doesn't exist, dump will return nil
    dumpRes, err := c.Do("DUMP", "fish")
    if err != nil {
        colorlog.Error(err.Error())
        return
    } else if dumpRes == nil {
        colorlog.Error("The key doesn't exist.")
        return
    }
    //  delete fish key, then restore it
    c.Do("DEL", "fish")
    _, err = c.Do("RESTORE", "fish", 0, dumpRes)
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fishVal, _ := redis.String(c.Do("GET", "fish"))
    fmt.Println("Restore value to fish key:", fishVal)
    //  RESTORE command can also restore value to a new key that doesn't exist
    // Will create the new key with dumped value
    _, err = c.Do("RESTORE", "newFish", 0, dumpRes)
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    newFishVal, _ := redis.String(c.Do("GET", "newFish"))
    fmt.Println("Restore value to newFish key:", newFishVal)
    //  RESTORE command can not restore value to a existing key, will return error
    _, err = c.Do("RESTORE", "fish", 0, dumpRes)
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
}

Output

5.png

Setbit和Getbit命令

Code

func SetbitAndGetbit(c redis.Conn) {
    colorlog.Info("Func SetbitAndGetbit()...")
    c.Do("SET", "dove", "a")
    //  The ascii code for a is 97, and the binary value of 97 is 01100001
    //  Let's set the 6 offset to 1, means 01100011, it's 99, c.
    setbitRes, err := c.Do("SETBIT", "dove", 6, 1)
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("set bit on existing key dove, result should be:", setbitRes)
    //  we can get bit on 6 offset, it should be 1 now.
    getbitRes, err := c.Do("GETBIT", "dove", 6)
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("get bit of 6 offset on existing key dove, result should be:", getbitRes)
    newVal, _ := redis.String(c.Do("GET", "dove"))
    fmt.Println("The new value of dove key should be:", newVal)
}

Output

6.png

MSETNX命令

Code

func Msetnx(c redis.Conn) {
    colorlog.Info("Func Msetnx()...")
    // It is assumed that the keys mg1 and mg2 do not exist.
    res1, err := c.Do("MSETNX", "mg1", "v1", "mg2", "v2")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    //  If msetnx successfully, the result should be 1.
    fmt.Println("msetnx two keys that don't exist, result is:", res1)
    // Now mg1 and mg2 are existing. Msetnx mg1 and other keys that don't exist, will fail and return 0
    res2, err := c.Do("MSETNX", "mg1", "v2", "mg3", "v3")
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    //  msetnx should be failed, the result should be 0.
    fmt.Println("msetnx mg1 which is existing and other keys that don't exist, result is:", res2)
    //  the value of mg1 still is v1, and mg3 key doesn't exist.
    mg1Val, _ := redis.String(c.Do("GET", "mg1"))
    fmt.Println("The value of mg1 key is still:", mg1Val)
    isExist, err := c.Do("EXISTS", "mg3")
    if err != nil {
        colorlog.Error(err.Error())
    } else {
        if isExist == int64(1) {
            fmt.Println("The mg3 exists")
        } else {
            fmt.Println("The mg3 doesn't exist")
        }
    }
}

Output

7.png

GETSET命令

Code

func Getset(c redis.Conn) {
    colorlog.Info("Func Getset()...")
    //  Getset will return the old value.
    c.Do("SET", "rhino", "big")
    oldVal, err := redis.String(c.Do("GETSET", "rhino", "small"))
    if err != nil {
        colorlog.Error(err.Error())
        return
    }
    fmt.Println("The old value of key is:", oldVal)
}

Output

8.png
上一篇 下一篇

猜你喜欢

热点阅读