美文网首页
golang之redis入门: string

golang之redis入门: string

作者: 每天十分钟玩转测试 | 来源:发表于2019-06-27 11:02 被阅读0次
    package main
    
    import (
        "fmt"
        "github.com/garyburd/redigo/redis"
    )
    
    /*
        redis操作之 string
        exists 检查是否存在某个key
        set key value  ex  time  键 值 过期模式  时间
        eg:
            127.0.0.1:6379> set a 444 ex 10
    
        setnx  key  value   只有key不存在的情况下,将key的值设置为value
        eg:
            127.0.0.1:6379> setnx a 333
            (integer) 1
            127.0.0.1:6379> get a
            "333"
        setex key seconds value 将key的值设置为value 并将key的生存时间设置为seconds秒 若key存在则覆盖
        eg:
            127.0.0.1:6379> setex a 3 bb
            OK
        ttl 查看key的生存时间
        127.0.0.1:6379> ttl a
        (integer) -2
    
        psetex key milliseconds value 和setex类似, 但以毫秒为单位。
        eg:
            127.0.0.1:6379> psetex a 10000 ccccccc
            OK
            127.0.0.1:6379> ttl a
            (integer) 8
            127.0.0.1:6379> ttl a
            (integer) 7
    
        getset key value 设置key的值为value并返回vkey在设置之前的旧值
    
        strlen key  返回key存储的字符串的长度
    
        append key value  若key存在则追加 key不存在则设置为value
        eg:
            127.0.0.1:6379> strlen a
            (integer) 3
            127.0.0.1:6379> append a bbbb
            (integer) 7
        setrange key offset value 范围设置, offset起始位置, 然后依次往后替换value
        时间复杂度为O(M) M 为value的长度
        eg:
            127.0.0.1:6379> get a
            "eeebbbb"
            127.0.0.1:6379> setrange a 3 fff
            (integer) 7
            127.0.0.1:6379> get a
            "eeefffb"
            127.0.0.1:6379> setrange a 77 kkk
            (integer) 80
            127.0.0.1:6379> get a
            "eeefffb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00kkk"
    
        getrange key start end 返回key存储的字符串的指定部分, 字符串的截取范围由start 和 end 两个偏移量决定 (包括 start 和 end 在内)。
        负的偏移量表示从字符的的尾部开始计数, -1表示最后一个字符串, -2表示倒数第二个字符串, 以此类推
        时间复杂度 O(n) 其中 N 为被返回的字符串的长度。
        域值超过长度,则返回从start到结尾的字符串
    
        incr key  为key存储的字符串数字值加上一
        eg:
            127.0.0.1:6379> set c 10
            OK
            127.0.0.1:6379> incr c
            (integer) 11
    
        incrby key increment  同上 不过可以设置增加的increment
        eg:
            127.0.0.1:6379> set c 10
            OK
            127.0.0.1:6379> incr c
            (integer) 11
            127.0.0.1:6379> incrby c 10
            (integer) 21
    
        incrbyfloat key increment
        无论假发计算所得的浮点数的实际精度有多长INCRBYFLOAT 命令的计算结果最多只保留小数点的后十七位。
        eg:
            127.0.0.1:6379> set f 64.5
            OK
            127.0.0.1:6379> incrbyfloat f 22.1
            "86.6"
    
        decr key 为key的数字值减去1  若key不存在, 那么键key的值会仙贝初始化为0然后在执行decr操作
        eg:
            127.0.0.1:6379> decr c
            (integer) 20
    
        mset key value key value   设置多个key和value
        msetnx key value key value  当且晋档所有给定的键都不存在时, 为所有给定键设置值
        即使只有一个给定键已经存在, MSETNX 命令也会拒绝执行对所有键的设置操作。
        msetnx 是一个原子性操作, 所有给定键要么就全部被设置,要么就全部都不设置, 不可能出现第三种状态
        mget 获取多个key的值命令将返回一个列表, 列表中包含了所有给定键的值。
    
    */
    
    func main() {
        conn, err := redis.Dial("tcp", "127.0.0.1:6379")
        if err != nil {
            fmt.Println("connect redis error: ", err)
            return
        }
        defer conn.Close()
        // set
        _, err = conn.Do("SET", "language", "goalng")
        if err != nil {
            fmt.Println("set error: ", err)
        }
    
        // get
        r, err := redis.String(conn.Do("GET", "language"))
        if err == nil {
            fmt.Println(r)
        }
    
        // mset
        _, err = conn.Do("MSET", "name", "zhangsan", "age", 22)
        if err != nil {
            fmt.Println("mset error: ", err)
        }
    
        // mget
        mr, err := redis.Strings(conn.Do("MGET", "name", "age"))
        fmt.Println(mr[0])
    
        hr, err := redis.StringMap(conn.Do("MGET", "name", "age"))
        fmt.Println(hr)
    
        // incr
        conn.Do("incr", "age")
        age, err := redis.String(conn.Do("GET", "age"))
        if err == nil {
            fmt.Println(age)
        }
    
        // getrange
        rg, err :=  redis.String(conn.Do("getrange", "name", 1, 3))
        if err == nil {
            fmt.Println("name getrange 1-3: ", rg)
        }
        conn.Do("msetnx", "name", "zhang", "age", 18)
    
        ch, err := redis.StringMap(conn.Do("mget", "name", "age"))
        fmt.Println("msetnx  当所有key都不存在的时候才会设置")
        fmt.Println(ch)
    }
    
    

    相关文章

      网友评论

          本文标题:golang之redis入门: string

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