Golang操作Redis

Go操控Redis

1.安装第三方开源Redis 库

2.Set/Get 接口

通过 Golang 添加和获取 key-value 比如 name:tom~

package main
 ​
 import (
     "fmt"
     "redigo-master/redis"//导入包
 )
 ​
 func main() {
     //通过go向redis写入数据和读取数据
     //1.连接到redis
     conn, err := redis.Dial("tcp", "127.0.0.1:6379")
     if err != nil {
         fmt.Println("redis dial err", err)
         return
     }
     fmt.Println("redis dial ok", conn)
     //操作string类型,向redis中写入数据 string [key-val]
     _, err = conn.Do("set", "name", "john猫") //返回结果和错误信息,写入结果可以省略                                                                                                                        
     if err != nil {
         fmt.Println("redis set err", err)
         return
     }
     defer conn.Close() //记得关闭
 ​
     //读取数据
     r, err := conn.Do("get", "name") //读取数据结果当然要接收
     if err != nil {
         fmt.Println("redis set err", err)
         return
     }
     //!!!!!注意,由于conn.Do("get", "name")返回的是interface()空接口类型
     //且name对应的值为字符串,要将其转为字符串
     //nameString := r.(string)//会出现错误:panic: interface conversion: interface {} is []uint8, not string
     nameString := string(r.([]byte)) //可以但麻烦
     //最好是直接利用redis包中提供的方法转
     //r, err := redis.String(conn.Do("get", "name"))
     fmt.Println("redis get ok:", nameString)

3.操作hash类型

field-val 可以是一个一个放入和读取,也可以批量放入和读取

 //逐个写入
     _, err = conn.Do("HSet", "user01", "name", "john")
     _, err = conn.Do("HSet", "user01", "age", 18)
     //逐个读取,注意逐个将空接口转为对应类型
     r1, err := redis.String(conn.Do("HGet", "user01", "name"))
     r2, err := redis.Int(conn.Do("HGet", "user01", "age"))
     fmt.Printf("操作 ok r1=%v r2=%v \n", r1, r2)
 ​
     //也可以是批量放入和读取
     _, err = conn.Do("HMSet", "user02", "name", "john", "age", 19)
     //空接口转为多种数据类型用redis.Strings()
     r3, err := redis.Strings(conn.Do("HMGet", "user02", "name", "age"))
     for i, v := range r3 {
         fmt.Printf("r[%d]=%s\n", i, v)
     }
 }

4. 给数据设置有效时间

给 name 数据设置有效时间为 10s

 _, err = c.Do("expire", "name", 10)

5. 操作List

 _, err = c.Do("lpush", "heroList", "no1:宋江", 30, "no2:卢俊义", 28) 
 ​
 r, err := redis.String(c.Do("rpop", "heroList"))

6. Redis 链接池

说明: 通过 Golang 对 Redis 操作, 还可以通过 Redis 链接池, 流程如下:

(1)事先初始化一定数量的链接,放入到链接池

(2)当 Go 需要操作 Redis 时,直接从 Redis 链接池取出链接即可。

(3)这样可以节省临时获取 Redis 链接的时间,从而提高效率.

使用案例:

package main
 ​
 import (
     "fmt"
     "redigo-master/redis"
 )
 ​
 // 定义一个全局的redis链接池
 var pool *redis.Pool
 ​
 // 当程序启动时,就初始化连接池
 func init() {
     pool = &redis.Pool{
         MaxIdle:     8,   //最大空闲连接数
         MaxActive:   0,   //表示和数据库的最大链接数,0表示没有限制
         IdleTimeout: 100, //最大空闲时间
         Dial: func() (redis.Conn, error) {//初始化连接,pool连接到redis
             return redis.Dial("tcp", "127.0.0.1:6379")
         },
     }
 }
 func main() {
     conn := pool.Get() //先从pool中取出一个链接
     defer conn.Close() //记得将链接延迟关闭
     //存入数据
     _, err := conn.Do("set", "name", "john猫")
     if err != nil {
         fmt.Println(err)
         return
     }
     //取出数据
     r1, err := redis.String(conn.Do("get", "name"))
     if err != nil {
         fmt.Println(err)
     }
     fmt.Println(r1)
     pool.Close() //关闭连接池,关闭后就不能再取出链接了
 }
 ​

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值