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