




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第詳解Golang中g(shù)cache模塊的基本使用目錄先說(shuō)結(jié)論優(yōu)勢(shì)基本使用打印結(jié)果緩存控制打印結(jié)果緩存淘汰策略實(shí)戰(zhàn)舉例代碼示例打印結(jié)果小技巧GetOrSetFunc的使用總結(jié)gcache提供統(tǒng)一的緩存管理模塊,提供了開發(fā)者可自定義靈活接入的緩存適配接口,并默認(rèn)提供了高速內(nèi)存緩存適配實(shí)現(xiàn)。
先說(shuō)結(jié)論
這篇文章通過(guò)結(jié)合商業(yè)項(xiàng)目的使用場(chǎng)景,為大家介紹了gcache的基本使用、緩存控制以及淘汰策略。
使用gcache做緩存處理,簡(jiǎn)單方便易上手!
優(yōu)勢(shì)
gcache模塊默認(rèn)提供的是一個(gè)高速的內(nèi)存緩存,操作效率非常高效,CPU性能損耗在ns納秒級(jí)別。使用簡(jiǎn)單易上手,非常適合單機(jī)應(yīng)用使用。
基本使用
我們可以通過(guò)gcache.New()創(chuàng)建一個(gè)緩存對(duì)象
也可以直接使用gcache包方法,使用方式都是一樣的。
下面代碼段介紹了gcache的基本使用:
packagemain
import(
"fmt"
"/gogf/gf/os/gcache"
"/gogf/gf/os/gtime"
funcmain(){
//創(chuàng)建一個(gè)緩存對(duì)象,
c:=gcache.New()
//設(shè)置緩存,不過(guò)期
_=c.Set("k1","v1",0)
//獲取緩存
v,_:=c.Get("k1")
fmt.Println("k1對(duì)應(yīng)的值:",v)//v1
//獲取緩存大小
n,_:=c.Size()
fmt.Println("緩存大小:",n)//1
//緩存中是否存在指定鍵名
b,_:=c.Contains("k1")
fmt.Println("是否存在k1:",b)//true
isContains,_:=c.Contains("k2")//false
fmt.Println("是否存在k2:",isContains)
//刪除并返回被刪除的鍵值
fmt.Println(c.Remove("k1"))//v1
//關(guān)閉緩存對(duì)象,讓GC回收資源
_=c.Close()
//當(dāng)然也可以便捷地直接使用gcache包方法,使用方式和上面的一樣
_=gcache.Set("k2","v2",gtime.M*30)//半小時(shí)后到期
k2Value,_:=gcache.Get("k2")
fmt.Println("k2對(duì)應(yīng)的值:",k2Value)//v2
}
打印結(jié)果
緩存控制
下面介紹一些特殊場(chǎng)景的用法:
當(dāng)鍵名不存在時(shí)寫入:SetIfNotExist
根據(jù)鍵名取不到值時(shí)寫入:GetOrSet
packagemain
import(
"fmt"
"/gogf/gf/os/gcache"
"time"
funcmain(){
//當(dāng)鍵名不存在時(shí)寫入,設(shè)置過(guò)期時(shí)間1秒
_,_=gcache.SetIfNotExist("k1","v1",time.Second)
//打印當(dāng)前的鍵名列表
keys,_:=gcache.Keys()
fmt.Println("打印當(dāng)前的鍵名列表:",keys)//[k1]
//打印當(dāng)前的鍵值列表
values,_:=gcache.Values()
fmt.Println("打印當(dāng)前的鍵值列表:",values)//[v1]
//獲取指定鍵值,如果不存在時(shí)寫入,并返回鍵值;第三個(gè)參數(shù)設(shè)置為0表示永不過(guò)期
v,_:=gcache.GetOrSet("k2","v2",0)
fmt.Println("寫入的鍵值:",v)//v2
//打印當(dāng)前的鍵值對(duì)
dataMap,_:=gcache.Data()
fmt.Println("打印當(dāng)前的鍵值對(duì):",dataMap)//map[k1:v1k2:v2]
//等待1秒,以便k1:v1自動(dòng)過(guò)期
time.Sleep(time.Second)
//再次打印當(dāng)前的鍵值對(duì),發(fā)現(xiàn)k1:v1已經(jīng)過(guò)期,只剩下k2:v2
data2,_:=gcache.Data()
fmt.Println("等待一秒后,打印當(dāng)前的鍵值對(duì):",data2)//map[k2:v2]
}
緩存淘汰策略
之前做項(xiàng)目的時(shí)候也有這么設(shè)計(jì)過(guò),現(xiàn)在gcache天然支持緩存淘汰策略
實(shí)戰(zhàn)舉例
給大家舉個(gè)項(xiàng)目中的栗子:
比如我有一個(gè)新聞網(wǎng)站,為了保證新聞詳情頁(yè)的加載速度,會(huì)把新聞詳情頁(yè)做緩存處理(內(nèi)容緩存,評(píng)論點(diǎn)贊等動(dòng)態(tài)獲取。)
一般來(lái)說(shuō)新產(chǎn)生的新聞熱度和訪問(wèn)量會(huì)更高,需要做緩存,而陳舊的新聞因?yàn)闊岫炔辉?,訪問(wèn)量較低就從緩存中釋放了。
解決上面的問(wèn)題一般有2種思路:
設(shè)置緩存時(shí)間是一個(gè)解決思路另外的思路就是設(shè)置緩存的淘汰策略。
比如:我一共允許緩存1萬(wàn)個(gè)緩存詳情頁(yè),當(dāng)超過(guò)1萬(wàn)個(gè)時(shí),會(huì)淘汰掉最早緩存的數(shù)據(jù),實(shí)現(xiàn)動(dòng)態(tài)且穩(wěn)定的緩存策略。
gcache天然支持這種緩存淘汰策略
代碼示例
下面舉個(gè)簡(jiǎn)單的栗子:
packagemain
import(
"fmt"
"/gogf/gf/os/gcache"
"time"
funcmain(){
//設(shè)置LRU淘汰數(shù)量
c:=gcache.New(2)
//添加10個(gè)元素,不過(guò)期
fori:=0;ii++{
_=c.Set(i,i,0)
n,_:=c.Size()
fmt.Println("緩存大?。?,n)
keys,_:=c.Keys()
fmt.Println("緩存鍵值:",keys)
//讀取鍵名1,保證該鍵名是優(yōu)先保留
v,_:=c.Get(1)
fmt.Println("讀取鍵名1的值:",v)
//等待一定時(shí)間后(默認(rèn)1秒檢查一次),
//元素會(huì)被按照從舊到新的順序進(jìn)行淘汰
fori:=0;ii++{
time.Sleep(2*time.Second)
n,_=c.Size()
fmt.Println("緩存大小:",n)
keys,_=c.Keys()
fmt.Println("緩存鍵值:",keys)
}
小技巧
GetOrSetFunc的使用
GetOrSetFunc獲取一個(gè)緩存值,當(dāng)緩存不存在時(shí)執(zhí)行指定的ffunc()(interface{},error),緩存該f方法的結(jié)果值,并返回該結(jié)果。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 股權(quán)激勵(lì)計(jì)劃(ESOP)實(shí)施與考核細(xì)則
- 智能手表硬件升級(jí)與心率變異性分析服務(wù)協(xié)議
- 購(gòu)物中心廣告資源委托經(jīng)營(yíng)與管理服務(wù)合同
- 職業(yè)教育院校校外師資共享協(xié)議
- 高層建筑期房預(yù)售利益共享與分割管理協(xié)議
- 虛擬現(xiàn)實(shí)體驗(yàn)館入場(chǎng)券預(yù)付款擔(dān)保協(xié)議
- 翻譯報(bào)告答辯要點(diǎn)解析
- 《皮膚病學(xué)概覽》課件2
- 《應(yīng)對(duì)校園暴力事件應(yīng)急預(yù)案與策略課件》
- 味千拉面禮儀培訓(xùn)體系
- 國(guó)企數(shù)字化轉(zhuǎn)型解讀及賦能zzw
- 博士學(xué)位論文答辯決議模板分享
- 國(guó)家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 6-29-03-03 電梯安裝維修工 人社廳發(fā)2018145號(hào)
- 《中華人民共和國(guó)的成立和鞏固》單元作業(yè)設(shè)計(jì) 八年級(jí)下冊(cè)歷史
- 【米酒釀造工藝的優(yōu)化探析(論文)6500字】
- 《〈紅樓夢(mèng)〉整本書閱讀4:專題研討:把握作品中的人物關(guān)系》教學(xué)設(shè)計(jì)
- 加油站應(yīng)急救援管理制度
- 數(shù)字化轉(zhuǎn)型對(duì)木材行業(yè)的變革
- 機(jī)關(guān)食堂整體服務(wù)方案范文
- 球閥設(shè)計(jì)計(jì)算書
- CJJ 242-2016 城市道路與軌道交通合建橋梁設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論