golang之redis入门: string

五知小白羊 · · 1526 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1526 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传