• beego redis作为缓存


    用redis来作为cach其实官网已经很详细了https://beego.me/docs/module/cache.md,只是我一般喜欢封装成通用方法
    直接上代码吧 redis.go作为通用工具类:

    package redis

    import (
        "fmt"
        "time"

        "github.com/astaxie/beego"
        "github.com/astaxie/beego/cache"
        _ "github.com/astaxie/beego/cache/redis"
        _ "github.com/gomodule/redigo/redis"
    )

    var redisCache cache.Cache

    func init() {
        redisHost := beego.AppConfig.String("redis::address")
        dataBase := beego.AppConfig.String("redis::database")
        password := beego.AppConfig.String("redis::password")
        redisKey := beego.AppConfig.String("redis::key")
        config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`, redisKey, redisHost, dataBase, password)
        var err error
        redisCache, err = cache.NewCache("redis", config)
        if err != nil || redisCache == nil {
            errMsg := "failed to init redis"
            beego.Error(errMsg, err)
            panic(errMsg)
        }
    }

    func SetStr(key, value string, time time.Duration) (err error) {
        err = redisCache.Put(key, value, time)
        if err != nil {
            beego.Error("set key:", key, ",value:", value, err)
        }
        return
    }

    func GetStr(key string) (value string) {
        v := redisCache.Get(key)
        value = string(v.([]byte)) //这里的转换很重要,Get返回的是interface
        return
    }

    func DelKey(key string) (err error) {
        err = redisCache.Delete(key)
        return
    }

    使用的时候需要修改配置文件app.conf

    [redis]
    address=localhost:6379
    database=0
    password=""
    key="demo"

    我一般习惯用字符串,所以上面redis封装的也是string, 如果是对象就用json 序列化和返序列化,使用示例:

    func (c *MainController) Get() {
        //声明对象
        type TokenView struct {
            Token     string
            LoginTime string
            LoginIp   string
        }
        //实例化
        t := TokenView{
            Token:     string(xid.New().String()),
            LoginTime: string(time.Now().Format("2006-01-02 15:04:05")),
            LoginIp:   strings.TrimSpace(c.Ctx.Input.IP()),
        }
        //json序列化
        str, err := json.Marshal(t)
        if err != nil {
            fmt.Print(err)
        }
        ///redis保存
        redis.SetStr("test", string(str), time.Minute*time.Duration(10))
        //redis获取
        v := redis.GetStr("test")
        fmt.Println(v)
        //json反序列化
        var obj TokenView
        json.Unmarshal([]byte(v), &obj)
        fmt.Println(obj.Token)

        c.TplName = "index.html"
    }

    必要的包还是 要引入的:

    import (
        "demo/redis"
        "encoding/json"
        "fmt"
        "strings"
        "time"

        "github.com/astaxie/beego"
        "github.com/rs/xid"
    )
  • 相关阅读:
    asp.net :使用jquery 的ajax +WebService+json 实现无刷新去后台值
    如何清理数据库缓存
    如何在虚拟机中Linux+Oracle10gRAC安装
    ORA01031 权限不足存储过程中DBA 角色用户无法执行DDL
    如何查看存储过程执行计划
    如何查看执行计划
    如何使用tkprof
    C#位运算讲解与示例[转]
    C#中Invalidate() 方法
    如何创建强命名程序集, 如何查看强命名程序集的PublicKeyToken
  • 原文地址:https://www.cnblogs.com/majiang/p/14164159.html
Copyright © 2020-2023  润新知