Golangはredigoを使用して構造体データをredisに保存する方法
2898 ワード
Golangはredigoを使用して構造体データをredisに保存する方法はまずシーケンス化され、redisに 保存される. redisから取得する値は、 である.
redis.Bytes(c.Receive())
を用いる[]byteを取得し、Unmarshal
を用いる package main
import (
"encoding/json"
"fmt"
"time"
"github.com/garyburd/redigo/redis"
)
var redisConc *RedisConnc
// User ...
type User struct {
Name string `json:"user"`
Age int `json:"age"`
}
// RedisConnc ...
type RedisConnc struct {
pool *redis.Pool
}
func main() {
var err error
InitRedis("127.0.0.1:6379", "")
c := redisConc.pool.Get()
user := User{
Name: "test-name",
Age: 18,
}
defer c.Close()
// 1. user set, Unmarshal
// c.Send("SET", "user", user)
// 2. Marshal
var ub []byte
ub, err = json.Marshal(user)
if err != nil {
fmt.Printf("%s
", err.Error())
}
c.Send("SET", "user", ub)
c.Flush()
v, err := c.Receive()
if err != nil {
fmt.Printf("%s
", err.Error())
}
fmt.Printf("%#v
", v)
c.Send("GET", "user")
c.Flush()
var vb []byte
vb, err = redis.Bytes(c.Receive())
if err != nil {
fmt.Printf("%s
", err.Error())
}
fmt.Printf("%#v
", vb)
u := new(User)
// user set, Unmarshal
err = json.Unmarshal(vb, &u)
if err != nil {
fmt.Printf("%s
", err.Error())
}
fmt.Printf("%#v
", u)
}
// InitRedis ...
func InitRedis(host string, passwd string) error {
var pool = &redis.Pool{
MaxIdle: 50,
MaxActive: 100,
IdleTimeout: 240 * time.Second,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", host)
if err != nil {
return nil, err
}
if passwd != "" {
if _, err := c.Do("AUTH", passwd); err != nil {
c.Close()
return nil, err
}
}
return c, err
},
// custom connection test method
TestOnBorrow: func(c redis.Conn, t time.Time) error {
if _, err := c.Do("PING"); err != nil {
return err
}
return nil
},
}
redisConc = &RedisConnc{pool}
return nil
}