老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

什么是Redis?Go语言操作Redis(三)

老男孩IT教育

行业新闻

2021年3月15日 14:29

Go语言操作Redis除使用 github.com/garyburd/redigo/redis第三方开源的Redis库外还可以使用github.com/go-redis/redis包。

  Go语言操作Redis除使用 github.com/garyburd/redigo/redis第三方开源的Redis库外还可以使用github.com/go-redis/redis包。

  安装

go get -u github.com/go-redis/redis

  创建客户端

package main

import (
    "log"

    "github.com/go-redis/redis"
)

var redisdb *redis.Client

func init() {
    db, err := RedisInit("127.0.0.1:6379")
    if err != nil {
        log.Panic(err)
    }
    redisdb = db
}
func main() {}
func RedisInit(addr string) (db *redis.Client, err error) {
    db = redis.NewClient(&redis.Options{
        Addr:     addr,
        Password: "",
        DB:       0,
        PoolSize: 10,
    })
    _, err = db.Ping().Result()
    return
}

  RedisInit函数正确返回*redis.Client(redisdb),后续所有操作都使用这个redisdb。

  String 操作

  set(key,value,expiration):给数据库中名称为key的string赋予值value,expiration为过期时间,0表示不过期。

func StringTest(redisdb *redis.Client) {
    err:=redisdb.Set("key1","hello",5 * time.Second).Err()
    if err!=nil {
        fmt.Println(err)
        return
    }

    err=redisdb.Set("key1","hello",0 * time.Second).Err()
    if err!=nil {
        fmt.Println(err)
        return
    }
}

  get(key):返回数据库中名称为key的string的value。

func StringTest(redisdb *redis.Client) {
    result,err:=redisdb.Get("key1").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}

  getset(key, value):给名称为key的string赋予上一次的value。

func StringTest(redisdb *redis.Client) {
    result,err:=redisdb.GetSet("key1","world").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
-----------------------------------------------------------
返回上一次的值hello,设置key1新值world

  mget(key1, key2,…, key N):返回库中多个string的value。

  假设redis中有key1:hello1,key2:hello2

func StringTest(redisdb *redis.Client) {
    //获取key1,key2的值
    result,err:=redisdb.MGet("key1","key2").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    for _,value:=range result {
        fmt.Println(value)
    }
}
-------------------------------------------------------
hello1
hello2

  setnx(key,value,expiration):将 key 的值设为 value ,当且仅当 key 不存在,expiration为过期时间,0表示不过期。

func StringTest(redisdb *redis.Client) {
    //获取key1,key2的值
    result,err:=redisdb.SetNX("key1","hello3",0).Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
----------------------------------------------------------
false    因为key1已经存在,所以结果返回false

  mset(pairs …interface{}):批量设置多个string的值。


func StringTest(redisdb *redis.Client) {
    result,err:=redisdb.MSet("key1","h1","key2","h2","key3","h3").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}

  msetnx(pairs …interface{}):

  同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

  即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。

  MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。


func StringTest(redisdb *redis.Client) {
    result,err:=redisdb.MSetNX("key1","1","key2","2").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}

  incr(key):名称为key的string增1操作。


func StringTest(redisdb *redis.Client) {
    //设置key1-1
    redisdb.Set("key1","1",0)
    result,err:=redisdb.Incr("key1").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
-----------------------------------------------
2

  incrby(key, integer):名称为key的string增加integer。


func StringTest(redisdb *redis.Client) {
    //设置key1-1
    redisdb.Set("key1","1",0)
    result,err:=redisdb.IncrBy("key1",10).Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
----------------------------------------------------
11    key1变为11

  decr(key):名称为key的string减1操作。

func StringTest(redisdb *redis.Client) {
    //设置key1-10
    redisdb.Set("key1","10",0)
    result,err:=redisdb.Decr("key1").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
--------------------------------------------------
9

  decrby(key, integer):名称为key的string减少integer。


func StringTest(redisdb *redis.Client) {
    //设置key1-10
    redisdb.Set("key1","10",0)
    result,err:=redisdb.DecrBy("key1",4).Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
----------------------------------------------------
6

  append(key, value):名称为key的string的值附加value。


func StringTest(redisdb *redis.Client) {
    redisdb.Set("key1","abc",0)
    result,err:=redisdb.Append("key1","def").Result()
    if err!=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
------------------------------------------------------
6    //返回6,append后字符串"abcdef"长度为6

  老男孩教育一直关注并投入研发力量在新技术领域,早在2012年我们开设Python开发课程,2017年率先开设GO语言培训课程,您的学习首选机构!

  推荐阅读:

  Go语言项目实战(一)!老男孩GO语言入门

  Python语言怎么样?为什么学Python?

  Python培训机构怎么选择?推荐:老男孩IT教育!

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。