詳解Golang中g(shù)cache模塊的基本使用_第1頁(yè)
詳解Golang中g(shù)cache模塊的基本使用_第2頁(yè)
詳解Golang中g(shù)cache模塊的基本使用_第3頁(yè)
詳解Golang中g(shù)cache模塊的基本使用_第4頁(yè)
詳解Golang中g(shù)cache模塊的基本使用_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論