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")) // 其他方法自行驗證 }