golang 操作redis 使用redigo

redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo


我们使用 redigo作为例子

redis连接操作

conn,err := redis.Dial("tcp","127.0.0.1:6379")
defer conn.Close()
if err != nil {
log.Fatal("redis connect fail!")
}


redis有 字符串,列表,字典,集合,有序集合 这几种类型

使用redigo操作和直接命令操作大同小异

set操作

ret ,err := conn.Do("set","golang",true)

get操作

ret1 ,err := conn.Do("get","golang")
if err != nil {
log.Println(err)
}
fmt.Println(string(ret1.([]byte)))

hmset

命令  hashkey,key1,val1,key2,val2

conn.Do("hmset","person1","sex","man","name","zhangsan")

hgetall

ret2,err := conn.Do("hgetall","person1")
if err != nil {
log.Println(err)
}
fmt.Printf("%s\n",ret2)

打印 [sex man name zhangsan]

lpush,lrange

conn.Do("lpush","list1",1)
conn.Do("lpush","list1",2)
ret3,err := conn.Do("lrange","list1",0,-1)
if err != nil {
log.Println(err)
}

所有的命令和redis在控制台输入差不多


使用values赋值

reply,err :=redis.Values(conn.Do("lrange","list1",0,-1))

可以使用for 循环输出

for _,v := range reply {
fmt.Println(string(v.([]byte)))
}

也可以使用 Scan

val,_ :=  redis.Scan(reply)

打印

[[50] [49]]   //[1,2]



使用管道

conn.Send("SET","name","sansan")
conn.Send("GET","name")
conn.Flush()
conn.Receive()
reply2,err := conn.Receive()
fmt.Println(string(reply2.([]byte)))

Receive() 调用两遍,第二遍返回的才是 GET 命令返回的结果



附上 redigo 的文档

https://godoc.org/github.com/garyburd/redigo/redis

在线交流