写点什么

♟Go 语言那些事儿之 Redis 连接与数据操作♟

用户头像
Regan Yue
关注
发布于: 3 小时前
♟Go语言那些事儿之Redis连接与数据操作♟

♟Go 语言那些事儿之 Redis 连接与数据操作♟

一、安装所需第三方包

在命令行模式下执行go get github.com/garyburd/redigo/redis


可将该包下载到 GOPATH 的路径下。

二、启动 redis-server 和 redis-cli

启动服务端要记得加上配置文件


 redis-server .\redis.windows.conf
复制代码


启动客户端,如果有密码记得输入密码。


C:\Users\11316\Desktop\redis-latest>redis-cli127.0.0.1:6379> auth 123456OK127.0.0.1:6379>
复制代码

三、编写代码

package main
import ( "github.com/garyburd/redigo/redis" "fmt" "os")
func HandleError(err error,when string) { if err!=nil{ fmt.Println(when,err) os.Exit(1) }}func main() { // Dial connects to the Redis server at the given network and // address using the specified options. conn, err := redis.Dial("tcp", "127.0.0.1:6379") HandleError(err,"redis.Dial")
//延时关闭连接 defer conn.Close() // Do sends a command to the server and returns the received reply. // 命令的名字 和 参数 reply, err := conn.Do("Get", "name") HandleError(err,"conn.Do Get") fmt.Printf("type=%T value=%v",reply,reply)
//根据具体的业务类型进行数据类型转换 nameStr, _ := redis.String(reply, err) fmt.Println(nameStr)
}
复制代码


先是导入了有关包。


然后写了一个处理错误的函数。os.Exit(1)表示出错,程序会马上结束运行,并且 defer 的东西不会再执行。


redis.Dial()这个函数是用来连接 redis 的,需要给定网络协议和 IP 地址及端口号,redis 的端口号默认为 6379.


defer conn.Close()表示延时结束与 redis 的连接,为了节省系统的 io 资源,需要及时结束!新手很容易忘记这个,要养成习惯!


conn.Do()是用来执行数据库命令的,第一个参数是命令名,后面的参数是数据库命令的参数。它返回的结果中 reply 是字节数组[]byte 类型,需要根据具体的业务类型进行数据类型转换。

四、一起来了解 Do()函数

conn.Do()替换为下列代码:


reply, err := conn.Do("llen", "list")
复制代码


执行结果为:


type=int64 value=5
复制代码


发现没有正确打印结果,打印的是空字符串,也就是 reply 未成功输出。


然后我们更改数据类型转换的函数。


使用:


nameStr, _ := redis.Int(reply, err)
复制代码


因为查询结果是Int类型,所以我们之前转换成 String 是不能成功的。这里我们现在使用Int(),就可以成功转换输出了。


我们来看看运行结果吧!


type=int64 value=55
复制代码


同理,是 Float 类型我们就需要使用Float(),是什么类型就需要转换为什么类型,这样才能正确输出。

操作数据

set 操作

reply, err := conn.Do("SET", "myname","ReganYue")
复制代码


运行结果:


type=string value=OKOK
复制代码


这后面就需要用


redis.String()
复制代码


来将 byte[]类型的数据转换为字符串类型的数据,才能正确输出。


reply, err := conn.Do("setex","yourname",20,"hello")
复制代码


如上所示,如果有多个参数就用多个参数,就是把命令行里面的空格变成逗号,然后是字符串用双引号括起来,不是字符串就不用双引号。


上面代码执行结果:


type=string value=OKOK
复制代码


127.0.0.1:6379> ttl yourname(integer) 5127.0.0.1:6379> ttl yourname(integer) 2127.0.0.1:6379> ttl yourname(integer) 1127.0.0.1:6379> ttl yourname(integer) -2
复制代码


说明执行成功了!

redis.String()和 redis.Strings()

reply, err := conn.Do("lrange","list",0,-1)
复制代码


如果执行这条语句,那么可以使用redis.Strings()


nameStr, _ := redis.Strings(reply, err)
复制代码


结果是这个:


type=[]interface {} value=[[49] [110 97 109 101] [51] [50] [49]][1 name 3 2 1]
复制代码


如果使用redis.String(),那么结果就是这个:


type=[]interface {} value=[[49] [110 97 109 101] [51] [50] [49]]
复制代码


来观察一下他们有什么区别吧!


这是我们需要注意的地方,这里如果使用redis.String()就会导致无输出结果。


Redis支持管道化,你可以使用管道化技术


管道化操作有 Send(),Flush(),Receive()方法


Do 方法将 Send,Flush 和 Receive 方法组合在一起。

发布于: 3 小时前阅读数: 2
用户头像

Regan Yue

关注

还未添加个人签名 2020.08.12 加入

对Go、Python、网络安全、区块链感兴趣. · 华为云云享专家

评论

发布
暂无评论
♟Go语言那些事儿之Redis连接与数据操作♟