怎樣快速的使用緩存 Cache

最近看到了幾種加緩存的方法掰曾,整理對比一下雹顺。

拿一個case來說,我們要去數(shù)據(jù)庫取一條用戶記錄稚矿,迫于性能,還要加一層緩存佑稠。我們針對這個問題看看幾種使用姿勢的對比。

Laravel 中 Facades 做法

$person = Cache::remember("person.{$id}", 5, function () use ($id) {
    return PersonDao::find($id);
});

Spring Cache 的做法

@Cache(key = "person#id", ttl = 5)
public Person getPerson(Integer id) {
    return PersonDao.find(id);
}

Person person = repository.getPerson();

備注:

  • PersonDao.find 表示從DB里去拿數(shù)據(jù)

這兩種方法看起來都很簡單旗芬,除了必要的語法格式舌胶,你需要寫的代碼就是:

  • cache 函數(shù)或標(biāo)記,表明需要緩存
  • key 不解釋
  • ttl 不解釋
  • func… 回源數(shù)據(jù)

基本上可以說是要啥寫啥了疮丛,不啰嗦幔嫂。

其實(shí) Php 和 Java 的語法很接近,兩種方法在兩種語言里都適用誊薄。不過 Php 需要第三方的注解支持履恩;Java 需要 8 以上來支持 lambda。

簡單的東西一定面臨擴(kuò)展性的問題呢蔫,我們來看一看他們的可能性似袁。

如果我們要更換緩存驅(qū)動怎么辦?

Laravel

Cache::store('redis')->remember(...)

Spring

@Cache(driver = redisCache.class)

依然很簡單咐刨。

有些時候昙衅,在使用 redis 作為緩存的時候,我們會用不同的編碼

Laravel

Cache::store('redis')->encoding('json')->remember(...)

Spring

@Cache(encoding = JsonEncoding.class)

方法其實(shí)是相似的定鸟,一般的而涉,Lavavel 利用自己習(xí)慣的鏈?zhǔn)讲僮骱?Php 的不定參數(shù),可以讓你隨時傳入自己個性化的需求联予。Spring 也利用 Annotation 來實(shí)現(xiàn)類似的效果啼县。

更多的,Laravel 和 Spring Boot 都遵循了約定優(yōu)于配置的原則沸久,使得在大多數(shù)情況下季眷,你都不需要傳這些,只需要使用全局的默認(rèn)配置就能滿足需求卷胯。也就是上面的最方便的辦法子刮。

簡單的方法介紹完了,我們來聊聊 Go 里的做法

剛剛接手一個 Go 項(xiàng)目窑睁,里面看到是這樣處理緩存的:

proxy := Proxy{
    Prefered: RedisAdapter{
        RedisClient
    },
    Backup: DaoAdapter{
        PersonDao
    }
}
person := proxy.Get('xxx').(Person)

是不是一下看懵逼了挺峡,我也是,這還是簡化的版本担钮。真正實(shí)現(xiàn)一個這樣的功能橱赠,大約新增了三個實(shí)現(xiàn)了數(shù)個空接口新類和幾個方法。

更蛋疼的箫津,這三個類都是類型相關(guān)的狭姨,換句話說宰啦,list/detail 兩種功能各自都需要3個類,換個 model 也不能復(fù)用饼拍。更悲催的赡模,因?yàn)?IDE 對 Go 的 interface 分析都不太好,當(dāng)你閱讀別人的代碼的時候惕耕,你完全不知道哪里是哪里。

所以诫肠,這里想嘗試一下司澎,能否在 Go 里使用上面的簡單方法處理緩存。

id := 9

person := remember("key", 30 * time.Second, func() interface{} {
    return PersonDao.find(id)
}).(*Person)

// 或者更 Go 一點(diǎn)

var person Person
remember(&person, "key", 30 * time.Second, func(iface interface{}) {
    *iface.(*Person) = *PersonDao.find(id)
})

比較煩的是栋豫,Go 不支持泛型挤安,定義函數(shù)的時候要盡可能少依賴類型。常用的辦法是把類型傳入丧鸯。

前者看起來簡單蛤铜,但有個很要命的地方,你需要很嚴(yán)格的把 Person 類進(jìn)行序列化丛肢。否則從 cache 里取出來后類型可能會丟围肥,導(dǎo)致斷言失敗。

那么蜂怎,第二種辦法可以嗎穆刻?或者說,在 Go 里能不能通過簡單標(biāo)記的辦法來實(shí)現(xiàn)多態(tài)杠步?

我只能說氢伟,不好弄。

Spring 里很多注解效果幽歼,都是靠動態(tài)代理實(shí)現(xiàn)的(相當(dāng)于 Php 里閹割版的 __call )朵锣。但遺憾的是,Go 目前不能支持這一特性甸私。如果要硬上的話诚些,也可以,搞出來可能跟我接的代碼挺像的皇型。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泣刹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子犀被,更是在濱河造成了極大的恐慌椅您,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寡键,死亡現(xiàn)場離奇詭異掀泳,居然都是意外死亡雪隧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門员舵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脑沿,“玉大人,你說我怎么就攤上這事马僻∽矗” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵韭邓,是天一觀的道長措近。 經(jīng)常有香客問我,道長女淑,這世上最難降的妖魔是什么瞭郑? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮鸭你,結(jié)果婚禮上屈张,老公的妹妹穿的比我還像新娘。我一直安慰自己袱巨,他們只是感情好阁谆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愉老,像睡著了一般笛厦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俺夕,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天裳凸,我揣著相機(jī)與錄音,去河邊找鬼劝贸。 笑死姨谷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的映九。 我是一名探鬼主播梦湘,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼件甥!你這毒婦竟也來了捌议?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤引有,失蹤者是張志新(化名)和其女友劉穎瓣颅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體譬正,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宫补,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年檬姥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粉怕。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡健民,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贫贝,到底是詐尸還是另有隱情秉犹,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布稚晚,位于F島的核電站崇堵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜈彼。R本人自食惡果不足惜筑辨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一俺驶、第九天 我趴在偏房一處隱蔽的房頂上張望幸逆。 院中可真熱鬧,春花似錦暮现、人聲如沸还绘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拍顷。三九已至,卻和暖如春塘幅,著一層夾襖步出監(jiān)牢的瞬間昔案,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工电媳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踏揣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓匾乓,卻偏偏與公主長得像捞稿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拼缝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容