今天要來介紹 Cache,不過我試過一遍以後,發現我卡住了。無論如何,還是做介紹,並且說明我卡在哪裡,當作一個記錄。
BeeGo 的 Cache 提供者有這五種:
用 go get 就可以安裝
go get github.com/astaxie/beego/cache
要使用 redis / memcache / ssdb 的話,得再安裝
# redis
go get -u github.com/astaxie/beego/cache/redis
# memcache
go get -u github.com/astaxie/beego/cache/memcache
## ssdb
go get -u github.com/astaxie/beego/cache/ssdb
要先 import
import (
"github.com/astaxie/beego/cache"
"github.com/astaxie/beego/cache/redis"
"github.com/astaxie/beego/cache/memcache"
"github.com/astaxie/beego/cache/ssdb"
)
然後依照網站上的文件,得先 NewCache
bm, err := cache.NewCache("memory", `{"interval":60}`)
if err!=nil {
panic(err.Error())
}
之後就可以這樣使用
bm.Put("astaxie", 1, 10*time.Second)
bm.Get("astaxie")
bm.IsExist("astaxie")
bm.Delete("astaxie")
每個 Cache Provider 都有提供 func init() ,在 init 時,會呼叫 cache.Register() 進行自我註冊,註冊後,會放到 adapters 這個 map 裡。
使用的時候,則是呼叫 NewCache(),而 NewCache 首先去 adapters 找尋是否有對應的 provider,有的話,就初始化,並且啟動 provider 裡的 StartAndGC()。
因此,程式只需要執行 NewCache() 一次就可以。
文件說,要把 NewCache() 回傳的值放到 global variable 裡。但是我查了老半天,實在是不知道 go 該怎麼在其他的 package 去引用到 main package 的 global variable。
一時也找不出該怎麼解決,因此這邊就先這樣吧。我是覺得 Cache 應該要跟 ORM 模組一樣,提供統一可以取得 cache 的入口函式才對。這部份等以後如果有看到,再來補充,暫時就先不使用 Cache。