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(&接收数据的容器)//解码
Go语言中,可以使用第三方包来操作Redis数据库。一个常用的包是go-redis,它提供了丰富的功能和易于使用的API。 首先,你需要安装go-redis包。可以使用以下命令来进行安装: ``` go get github.com/go-redis/redis/v8 ``` 接下来,你需要导入所需的包: ```go import ( "github.com/go-redis/redis/v8" "context" ) ``` 然后,你可以创建一个Redis客户端: ```go func main() { // 创建一个Redis客户端 rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", // Redis服务器地址和端口 Password: "", // 密码(如果有的话) DB: 0, // 使用的数据库 }) // 建立连接 err := rdb.Ping(context.Background()).Err() if err != nil { panic(err) } fmt.Println("成功连接到Redis数据库!") } ``` 现在,你已经成功连接到Redis数据库了。接下来,我们可以使用一些常见的操作来演示一下,例如设置和获取键值对: ```go func main() { // 创建一个Redis客户端... // 设置键值对 err := rdb.Set(context.Background(), "key", "value", 0).Err() if err != nil { panic(err) } // 获取键的值 val, err := rdb.Get(context.Background(), "key").Result() if err != nil { panic(err) } fmt.Println("key的值为:", val) } ``` 以上示例展示了如何使用go-redis包来设置和获取键值对。你还可以使用其他操作,如删除键、检查键是否存在、设置过期时间等。具体的用法可以参考go-redis的文档。 希望以上示例对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值