redigo是redis官网推荐的go client之一。本文简单介绍其使用。
安装
go get github.com/garyburd/redigo/redis
Example
simple get
package main
import (
"log"
"github.com/garyburd/redigo/redis"
)
func main() {
server := "127.0.0.1:6379"
c, err := redis.Dial("tcp", server)
if err != nil {
log.Println("connect server failed:", err)
return
}
defer c.Close()
v, err2 := redis.String(c.Do("GET", "foo"))
if err2 != nil {
log.Println("GET failed:", err2)
return
}
log.Println("value:", v)
}
output:
value: “bar”
set
set json格式的数据。
package main
import (
"log"
"encoding/json"
"github.com/garyburd/redigo/redis"
)
type DeviceItem struct {
Id int `json:"device_id"`
Type int `json:"device_type"`
}
func main() {
server := "127.0.0.1:6379"
c, err := redis.Dial("tcp", server)
if err != nil {
log.Println("connect server failed:", err)
return
}
defer c.Close()
device := DeviceItem{Id: 3002, Type: 2}
b, err2 := json.Marshal(device)
if err2 != nil {
log.Println("Unmarshal failed:", err2)
return
}
v, err3 := redis.String(c.Do("SET", "10.8.158.119", string(b)))
if err3 != nil {
log.Println("GET failed:", err3)
return
}
log.Println("value:", v)
}
output:
2017/12/15 15:01:28 value: OK
pool
redis pool的使用。
package main
import (
"encoding/json"
"log"
"time"
"github.com/garyburd/redigo/redis"
)
type Host struct {
IP string
Name string
}
var RedisConnPool *redis.Pool
const redisServer = "127.0.0.1:6379"
func main() {
// redis pool
InitRedisConnPool()
go reader("Num1")
go reader("Num2")
select {
}
// at last
RedisConnPool.Close()
}
func InitRedisConnPool() {
RedisConnPool = &redis.Pool{
MaxIdle: 1,
IdleTimeout: 240 * time.Second,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", redisServer)
if err != nil {
return nil, err
}
return c, err
},
TestOnBorrow: PingRedis,
}
}
func PingRedis(c redis.Conn, t time.Time) error {
_, err := c.Do("ping")
if err != nil {
log.Println("[ERROR] ping redis fail", err)
}
return err
}
func reader(name string) {
log.Printf("reader %s start ...\n", name)
rc := RedisConnPool.Get()
defer rc.Close()
for {
v, err := redis.String(rc.Do("GET", "Host1001"))
if err != nil {
log.Printf("%s GET failed:%v\n", name, err)
time.Sleep(1*time.Second)
continue
}
log.Printf("%s value:%v\n", name, v)
h := Host{}
if err := json.Unmarshal([]byte(v), &h); err != nil {
log.Printf("%s Unmarshal failed:%v\n", name, err)
continue
}
log.Printf("%s host:%v\n", name, h)
time.Sleep(1*time.Second)
}
}
参考
redis官网推荐的go client
https://redis.io/clients#go
redigo
https://github.com/garyburd/redigo
redigo example
https://www.zybuluo.com/NickYu/note/61130
https://studygolang.com/articles/4542
http://blog.youkuaiyun.com/stevefang/article/details/40474827