1. 获取 redigo
go get github.com/gomodule/redigo/redis
2. 连接 redis
使用 redis.Dial("tcp", "127.0.0.1:6379") 进行连接。
3. 操作
redis.Conn.Do():用于执行各种 redis 命令。
redis.String():接受Do方法返回的值,并将其转为字符串。
redis.Strings():接受Do方法返回的值,并将其转为字符串切片。
redis.Int64():接受Do方法返回的值,并将其转为整数。
redis.Int64s():接受Do方法返回的值,并将其转为整数切片。
redis.Float64():接受Do方法返回的值,并将其转为浮点数。
redis.Float64s():接受Do方法返回的值,并将其转为浮点数切片。
redis.Values():接受Do方法返回的值,一般用来接收 hash 类型的值。
4. 管道的使用
redis.Conn.Send():将 redis 命令存放在缓存区,可以有多个 Send 方法,这个时候命令并没有发送给 redis 。
redis.Conn.Flush():刷新缓存区,并将命令一起发送给 redis 执行。
redis.Conn.Receive():接受返回。
5. 代码 demo
package main
import (
"fmt"
"github.com/gomodule/redigo/redis"
)
func main() {
//获取连接
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Printf("redis conn err %v", err)
return
}
//关闭连接
defer conn.Close()
//使用 redis.Conn.Do() 方法执行命令
conn.Do("set", "k1", "redis")
//redis.String()
v1, err := redis.String(conn.Do("get", "k1"))
if err != nil {
fmt.Printf("err is %v\n", err)
} else {
fmt.Printf("v1 is %s\n", v1)
}
//添加 list
conn.Do("lpush", "l1", 1)
conn.Do("lpush", "l1", 2)
conn.Do("lpush", "l1", 3)
conn.Do("lpush", "l1", 4)
//获取 list 长度
len, _ := redis.Int64(conn.Do("llen", "l1"))
fmt.Printf("l1 len is %d\n", len)
//取第一个值
l1, _ := redis.Int64(conn.Do("lpop", "l1"))
fmt.Printf("l1 pop %d\n", l1)
//遍历
values, _ := redis.Int64s(conn.Do("lrange", "l1", 0, -1))
for i, v := range values {
fmt.Printf("l1[%d] is %d\n", i, v)
}
//hash
conn.Do("hset", "h1", "id", 1)
conn.Do("hset", "h1", "name", "tom")
conn.Do("hset", "h1", "age", 18)
conn.Do("hmset", "h2", "id", 2, "name", "jinx", "age", 17)
hv, err := redis.Values(conn.Do("hmget", "h1", "id", "name", "age"))
if err != nil {
fmt.Printf("err is %v\n", err)
}
for _, v := range hv {
fmt.Printf("%s\n", v.([]byte))
}
//
h2v, err := redis.Values(conn.Do("hgetall", "h2"))
if err != nil {
fmt.Printf("err is %v\n", err)
}
for _, v := range h2v {
fmt.Printf("%s\t", v.([]byte))
}
fmt.Println()
//管道的使用
conn.Send("setnx", "lock", "lock")
conn.Send("setex", "lock", 10, "lock")
conn.Flush()
r, err := conn.Receive()
if err != nil {
fmt.Printf("err is %v\n", err)
} else {
fmt.Printf("%v\n", r)
}
}