• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

GoRedis开发

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

redigo库来实现redis的操作:https://github.com/gomodule/redigo

 

Redis常用操作 

示例代码:

package main

import (
    "github.com/gomodule/redigo/redis"
    "fmt"
    "time"
)

func initRedis() (dial redis.Conn, err error) {
    dial, err = redis.Dial("tcp", "172.16.65.183:30001")
    if err != nil {
        panic(err)
    }
    return dial, nil
}


func testSetGet(dial redis.Conn) {
    // 设置一个Key和value
    dial.Do("set", "abc", "this is a test")

    // 设置过期时间
    dial.Do("expire", "abc", 2)
    
    // 读取指定key的value
    reply, err := dial.Do("get", "abc")
    str, err := redis.String(reply, err)
    if err != nil {
        panic(err)
    }
    fmt.Println(str)
}

func testHSetGet(dial redis.Conn) {
    key := "abc"
    value := "this is a book test"

    // 设置一个hash表来存储
    reply, err := dial.Do("hset", "books", key, value)
    if err != nil {
        panic(err)
    }
    fmt.Println(reply)
    reply2, err := dial.Do("hget", "books", key)
    str, err := redis.String(reply2, err)
    if err != nil {
        panic(err)
    }
    fmt.Println(str)
}

func testMSetGet(dial redis.Conn) {
    key := "abc"
    value := "this is a test book"
    key2 := "golang"
    value2 := "this is a golang book"
    
    // 一次设置多个key
    dial.Do("mset", "books", key, value, key2, value2)
    str, err := redis.Strings(dial.Do("mget", "books",key, key2))
    if err != nil {
        panic(err)
    }
    fmt.Println(str)
}



func main() {
    dial, _ := initRedis()
    testSetGet(dial)
    testHSetGet(dial)
    testMSetGet(dial)

    time.Sleep(4 * time.Second)
    reply, err := dial.Do("get", "abc")
    str, err := redis.String(reply, err)
    if err != nil {
        panic(err)
    }
    fmt.Println("get abc", str)

    defer dial.Close()
}
View Code

 

Redis连接池

连接池使用场景

对于一些大对象,或者初始化过程较长的可复用的对象,我们如果每次都new对象出来,那么意味着会耗费大量的时间。

我们可以将这些对象缓存起来,当接口调用完毕后,不是销毁对象,当下次使用的时候,直接从对象池中拿出来即可。

示例代码:

package main

import (
    "github.com/gomodule/redigo/redis"
    "time"
    "fmt"
)

func initRedisPool(serverAddr string, passwd string) (pool *redis.Pool) {
    pool = &redis.Pool{
        MaxIdle:   16,
        MaxActive: 1024,
        IdleTimeout: 240 * time.Second,
        Dial: func() (redis.Conn, error) {
            conn, err := redis.Dial("tcp", serverAddr)
            if err != nil {
                return nil, err
            }
            if len(passwd) >0 {
                _, err := conn.Do("auth", passwd)
                if err != nil {
                    return nil, err
                }
            }
            return conn, nil
        },
        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            if time.Since(t) < time.Minute {
                return nil
            }
            _, err := c.Do("ping")
            return err
        },
    }
    return pool
}

func testRedisPool() {
    redisPool := initRedisPool("172.16.65.181:30001", "")
    // 获取一个redis连接
    conn := redisPool.Get()

    key := "name"
    value := "golang"
    conn.Do("hset", "books", key, value)
    val, err := redis.String(conn.Do("hget", "books", key))
    if err != nil {
        panic(err)
    }
    conn.Close()
    fmt.Println(val)
}

func main() {
    testRedisPool()
}
View Code

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go语言内存存储模型(对于可执行程序)发布时间:2022-07-10
下一篇:
[Go]gin解决:accept4:toomanyopenfiles发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap