go-redis 基于beego正确使用序列化存储数据和反序列化获取数据

lmseohy 2020-01-11

安装go-redis
// 安装命令
go get github.com/gomodule/redigo/redis
// 导入使用
import(
  "github.com/gomodule/redigo/redis"
)
// go操作redis文档
https://godoc.org/github.com/gomodule/redigo/redis

序列化存储数据和反序列化获取数据

var aType []models.ArticleType
    // redis 在就获取,不再就存储
    // conn, err := redis.Dial("tcp", ":6379")
    // if err != nil {
    //     beego.Info("redis连接失败")
    // }
    // defer conn.Close()
    // reply, err := conn.Do("set", "atype", aType)
    // if err != nil {
    //     beego.Info("redis存储失败")
    // }
    // beego.Info(reply)

    // 序列化与发序列化
    conn, err := redis.Dial("tcp", ":6379")
    if err != nil {
        beego.Info("redis连接失败")
    }
    defer conn.Close()
    ok, _ := redis.Bool(conn.Do("EXISTS", "atype"))
    beego.Info(ok)
    if ok == true {
        ReadBuffer, _ := redis.Bytes(conn.Do("get", "atype"))
        beego.Info(ReadBuffer)
        dec := gob.NewDecoder(bytes.NewReader(ReadBuffer))
        err = dec.Decode(&aType)
        if err != nil {
            beego.Info("获取不到解码后的数据:", err)
        }
        beego.Info(aType)
    } else {
        // 查询
        o.QueryTable("ArticleType").All(&aType)

        // redis存储序列化的数据
        var buffer bytes.Buffer
        enc := gob.NewEncoder(&buffer)
        err = enc.Encode(aType)
        reply, err := conn.Do("set", "atype", buffer.Bytes())
        if err != nil {
            beego.Info("redis存储失败")
        }
        beego.Info(reply)
    }

相关推荐