iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
Modern Web

BeeGo系列 第 12

Cache

  • 分享至 

  • xImage
  •  

今天要來介紹 Cache,不過我試過一遍以後,發現我卡住了。無論如何,還是做介紹,並且說明我卡在哪裡,當作一個記錄。

BeeGo 的 Cache 提供者有這五種:

  • memory:使用記憶體當作 cache
  • file:使用檔案當作 cache
  • redis:使用 Redis 當作 cache
  • memcache:使用 memcached 當作 cache
  • ssdb:使用 SSDB 當作 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。


上一篇
Routing
下一篇
Session(1)
系列文
BeeGo30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言