go语言web开发23 - beego框架之cache模块


beego 的 cache 模块是用来做数据缓存的,目前支持 file、memcache、memory 和 redis 四种引擎,安装方式如下:

go get github.com/astaxie/beego/cache

下面我们来看下四种cache引擎的使用方法吧。

 

一、memory引擎的cache使用

// 引入包
import "github.com/astaxie/beego/cache"

func (c *MemoryCacheController) Get() {
    // 初始化缓存对象,参数:memory类型cache引擎和memory的过期时间(单位秒),返回值:cache类型的接口(该接口有一系列方法)和错误信息
    ac, err := cache.NewCache("memory", `{"interval":"360"}`)
    if err != nil {
        fmt.Println("NewCache failed, err:", err)
    }

    // Put方法:往缓存里存储数据(key, value, 过期时间)
    err = ac.Put("name","优选工具", 360)
    if err != nil {
        fmt.Println("put name failed err:", err)
    }
    err = ac.Put("age",18, 360)
    if err != nil {
        fmt.Println("put age failed err:", err)
    }

    // Get方法:查询缓存里的一条数据,根据key查询
    name := ac.Get("name")
    age := ac.Get("age")
    fmt.Println("get name:", name)
    fmt.Println("get age:", age)

    // GetMulti方法:查询多条数据(注意:用Get方法获取数据后缓存里的数据就没有了,所以需要重新Put数据才可以用GetMulti方法获取数据)
    keys := []string{"name","age"}
    values := ac.GetMulti(keys)
    fmt.Println("getmulti:",values)

    // 判断key是否存在(注意:用Get方法获取数据后缓存里的数据就没有了,所以需要重新Put数据才可以判断数据存不存在)
    fmt.Println("is_exist:",ac.IsExist("name"))

    // 注意:memory类型的cache:同一个key名字put一次只支持获取一次,第二次获取不到值


    // Delete:单个key删除
    err1 := ac.Delete("name")
    if err1 != nil {
        fmt.Println("delete failed ,err :", err)
    }
    name1 := ac.Get("name")
    age1 := ac.Get("age")
    fmt.Println("get name:", name1)
    fmt.Println("get age:", age1)


    // Clearall:删除所有key
    err2 := ac.ClearAll()
    fmt.Println(err2)

    // Incr:key对应的值(int类型)自加一
    ac.Put("age", 18, 360)
    ac.Incr("age")
    fmt.Println(ac.Get("age"))

    // Decr:key对应的值(int类型)自减一
    ac.Put("age", 18, 360)
    ac.Decr("age")
    ac.Decr("age")
    fmt.Println(ac.Get("age"))

}

 

二、file引擎的cache使用

// 引入包
import "github.com/astaxie/beego/cache"

func (c *FileCacheController) Get() {
    /*
    初始化缓存对象,返回值:cache类型的接口(该接口有一系列方法)和错误信息
    参数:
        CachePath:缓存的文件目录
        FileSuffix:文件后缀
        DirectoryLevel:目录层级
        EmbedExpiry:过期时间,字符串类型
    */
    ac, err := cache.NewCache("file", `{"CachePath":"./cache_file","FileSuffix":"cache","DirectoryLevel":"2","EmbedExpiry":"120"}`)
    if err != nil {
        fmt.Println("NewCache failed, err:", err)
    }

    // put方法:往缓存里存数据
    ac.Put("name","优选短链接", 120)
    ac.Put("age",18,120)
    if ac.IsExist("name") {
        fmt.Println("get name",ac.Get("name"))
    }

    // get方法:单条获取数据
    fmt.Println("get name",ac.Get("name"))

    // GetMulti方法:查询多条数据
    keys := []string{"name","age"}
    values := ac.GetMulti(keys)
    fmt.Println("getmulti:",values)

    // delete:删除单个key
    ac.Delete("name")
    fmt.Println("get name",ac.Get("name"))

    // Incr方法:key的值自加一
    ac.Incr("age")
    fmt.Println(ac.Get("age"))

    // decr方法:key的值自减一
    ac.Decr("age")
    ac.Decr("age")
    fmt.Println(ac.Get("age"))

    // ClearAll:file引擎的clearall方法不好用(待验证)
    err1 := ac.ClearAll()
    if err1 != nil {
        fmt.Println("clear all failed, err:", err1)
    }
    fmt.Println("clear all:",ac.Get("age"))


}

 

三、memcache引擎的cache使用

// 导入包
import (
    "github.com/astaxie/beego/cache"
    _ "github.com/astaxie/beego/cache/memcache"
)

func (c *MemcacheCacheController) Get() {
    /*
        初始化缓存对象,返回值:cache类型的接口(该接口有一系列方法)和错误信息
        参数:conn:memcached的连接信息
    */
    ac, err := cache.NewCache("memcache", `{"conn":"127.0.0.1:11211"}`)
    if err != nil {
        fmt.Println("NewCache failed, err:", err)
    }

    // put
    ac.Put("name", "优选二维码", 120)
    if ac.IsExist("name") {
        name := ac.Get("name")
        fmt.Println("get name",name)
    }

    // 方法就那几个,自行验证即可
}

 

四、redis引擎的cache使用

// 导入包
import (
    "github.com/astaxie/beego/cache"
    _ "github.com/astaxie/beego/cache/redis"
)

func (c *RedisCacheController) Get() {
    /*
        初始化缓存对象,返回值:cache类型的接口(该接口有一系列方法)和错误信息
        参数:
            key:redis链接的名称(如key设置为:szy,然后往redis里写入key的名字为name,在redis里查询得到:"szy:name",如果不设置key默认key字段的值为:beeCacheRedis)
            conn:redis连接信息
            dbNum:哪个库
            password:redis密码
    */
    ac, err := cache.NewCache("redis", `{"key":"szy","conn":"127.0.0.1:6379","dbNum":"0"}`)
    if err != nil {
        fmt.Println("NewCache failed, err:", err)
    }

    // 往redis里写数据
    err1 := ac.Put("name","devops测试", time.Second * 60)
    if err1 != nil {
        fmt.Println("put data failed, err:", err1)
    }

    // 从redis里读数据
    if ac.IsExist("name") {
        fmt.Println(ac.Get("name"))
    }
    fmt.Println(ac.Get("name"))

    // 其他方法自行验证

}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM