♟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-cli
127.0.0.1:6379> auth 123456
OK
127.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=5
5
同理,是Float类型我们就需要使用Float()
,是什么类型就需要转换为什么类型,这样才能正确输出。
操作数据
set操作
reply, err := conn.Do("SET", "myname","ReganYue")
运行结果:
type=string value=OK
OK
这后面就需要用
redis.String()
来将byte[]类型的数据转换为字符串类型的数据,才能正确输出。
reply, err := conn.Do("setex","yourname",20,"hello")
如上所示,如果有多个参数就用多个参数,就是把命令行里面的空格变成逗号,然后是字符串用双引号括起来,不是字符串就不用双引号。
上面代码执行结果:
type=string value=OK
OK
127.0.0.1:6379> ttl yourname
(integer) 5
127.0.0.1:6379> ttl yourname
(integer) 2
127.0.0.1:6379> ttl yourname
(integer) 1
127.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方法组合在一起。
- 点赞
- 收藏
- 关注作者
评论(0)