GO语言操作Redis

GO语言操作Redis

1.安装驱动

go get -u -v github.com/gomodule/redigo/redis

2.连接
Dial(network,address string)(conn,err)

参数1:协议,tcp、udp等,一般会用tcp

参数2:地址,如127.0.0.1:6379

返回值1:连接(socket)

返回值2:错误信息

注意:不要忘了defer关闭连接

3.具体操作
3.1方法一
Send(commandName string, args ...interface{}) error
Flush() error
Receive() (reply interface{}, err error)

​ Send函数发出指令,Flush将连接的输出缓冲区刷新到服务器,Receive接收服务器返回的数据。

例如:

c.Send("SET", "foo", "bar")
c.Send("GET", "foo")
c.Flush()//把缓冲区命令发到服务器
c.Receive() // 接收set请求返回的数据
v, err = c.Receive() // 接收get请求传输的数据

这里的c表示Dial返回的连接(conn)

3.2方法二(常用)
Do(commandName string, args ...interface{}) (reply interface{}, err error)

参数1:请求名称,如:set、get、mget等

参数2:参数

返回值1:服务器返回的数据(接口类型)

返回值2:错误信息

4.回复助手函数
  • Redis中获取一个数据直接用回复助手函数,如:
resp,err:=conn.Do("get","c1")
result,err:=redis.String(resp,err)
  • Redis中获取多个数据,这多个数据是同一类型,用相对应的切片接收,如:
resp,err:=conn.Do("mget","t1","t2","t3")
result,err:=redis.Strings(resp,err)
  • Redis中获取多个数据,这多个数据是不同类型,用Values+Scan接收,如:
resp,err:=conn.Do("mget","r1","r2","r3")
result,err:=redis.Values(resp,err)
if err != nil {
	beego.Error("获取数据失败")
}
var v1 int
var v2 string
var v3 float64
redis.Scan(result,&v1,&v2,&v3)
  • 如果数据是非常见类型,用序列化和反序列化

    比如结构体对象切片,存储是容易,但是是以字符串存储,取出时也是字符串,这样数据取出就很难。
    

解决思路:把结构体对象切片序列化(编码)存储到redis中,获取字节然后反序列化(解码)成我们需要的数据

序列化(字节化):

var buffer bytes.Buffer//容器
enc:=gob.NewEncoder(&buffer)//编码器
err:=enc.Encode(要编码的数据)//编码
//存到Redis,如:
conn.Do("set","newsweb",buffer.bytes())

反序列化(反字节化):

//先获取Redis中的内容:
resp,err:=conn.Do("get","newsweb")
result,_:=redis.Bytes(resp,err)
dec:=gob.NewDecoder(bytes.NewReader(result))//解码器
//定义一个容器,接收解码之后的数据,注意要与编码的数据保持一致
dec.Decode(&接收数据的容器)//解码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值