网络编程
位置:首页>> 网络编程>> Go语言>> go redis之redigo的使用

go redis之redigo的使用

作者:General_zy  发布时间:2024-05-22 17:46:37 

标签:go,redis,redigo

本文主要介绍了go redis之redigo的使用,分享给大家,具体如下:

安装

go-redis 三方库为我们封装了很多函数来执行 Redis 命令,而 redigo 三方库只有一个 Do 函数执行 Redis 命令,更接近使用 redis-cli 操作 Redis。
go-redis 支持连接哨兵及集群模式的Redis

go get github.com/gomodule/redigo
go get github.com/go-redis/redis/v8

链接Redis

func main() {
   c, err := redis.Dial("tcp", "localhost:6379")
   if err != nil {
       fmt.Println("conn redis failed,", err)
       return
   }
   fmt.Println("redis conn success")
   defer c.Close()
}

String类型操作

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("Set", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.Int(c.Do("Get", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? fmt.Println(r)
}
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("MSet", "abc", 100, "efg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.Ints(c.Do("MGet", "abc", "efg"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? for _, v := range r {
? ? ? ? fmt.Println(v)
? ? }
}

设置过期时间

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("expire", "abc", 10)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
}
----------------------------
或者这样也行
do, err := client.Do("set", "name", "1111","EX",5)

List操作

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("lpush", "book_list", "abc", "ceg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.String(c.Do("lpop", "book_list"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? fmt.Println(r)
}

Hash表

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("HSet", "books", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.Int(c.Do("HGet", "books", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? fmt.Println(r)
}

Redis连接池

var pool *redis.Pool ?//创建redis连接池

func init(){
? ? pool = &redis.Pool{ ? ? //实例化一个连接池
? ? ? ? MaxIdle:16, ? ?//最初的连接数量
? ? ? ? // MaxActive:1000000, ? ?//最大连接数量
? ? ? ? MaxActive:0, ? ?//连接池最大连接数量,不确定可以用0(0表示自动定义),按需分配
? ? ? ? IdleTimeout:300, ? ?//连接关闭时间 300秒 (300秒不使用自动关闭) ? ?
? ? ? ? Dial: func() (redis.Conn ,error){ ? ? //要连接的redis数据库
? ? ? ? ? ? return redis.Dial("tcp","localhost:6379")
? ? ? ? },
? ? }
}

func main(){
? ? c := pool.Get() //从连接池,取一个链接
? ? defer c.Close() //函数运行结束 ,把连接放回连接池

? ? ? ? _,err := c.Do("Set","abc",200)
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println(err)
? ? ? ? ? ? return
? ? ? ? }

? ? ? ? r,err := redis.Int(c.Do("Get","abc"))
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println("get abc faild :",err)
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? fmt.Println(r)
? ? ? ? pool.Close() //关闭连接池
}

来源:https://blog.csdn.net/General_zy/article/details/124831998

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com