新聞中心
基本介紹
?gcache?是提供統(tǒng)一的緩存管理模塊,提供了開發(fā)者可自定義靈活接入的緩存適配接口,并默認提供了高速內(nèi)存緩存適配實現(xiàn)。

成都做網(wǎng)站、成都網(wǎng)站建設、成都外貿(mào)網(wǎng)站建設的開發(fā),更需要了解用戶,從用戶角度來建設網(wǎng)站,獲得較好的用戶體驗。創(chuàng)新互聯(lián)多年互聯(lián)網(wǎng)經(jīng)驗,見的多,溝通容易、能幫助客戶提出的運營建議。作為成都一家網(wǎng)絡公司,打造的就是網(wǎng)站建設產(chǎn)品直銷的概念。選擇創(chuàng)新互聯(lián),不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價值服務。
使用方式:
import "github.com/GOgf/gf/v2/os/gcache"接口文檔:
https://pkg.go.dev/github.com/gogf/gf/v2/os/gcache
簡要介紹:
- ?
gcache?默認提供默認的高速內(nèi)存緩存對象,可以通過包方法操作內(nèi)存緩存,也可以通過?New?方法創(chuàng)建內(nèi)存緩存對象。在通過包方法使用緩存功能時,操作的是?gcache?默認提供的一個?gcache.Cache?對象,具有全局性,因此在使用時注意全局鍵名的覆蓋。 - ?
gcache?使用的鍵名類型是?interface{}?,而不是?string?類型,這意味著我們可以使用任意類型的變量作為鍵名,但大多數(shù)時候建議使用?string?或者?[]byte?作為鍵名,并且統(tǒng)一鍵名的數(shù)據(jù)類型,以便維護。 - ?
gcache?存儲的鍵值類型是?interface{}?,也就是說可以存儲任意的數(shù)據(jù)類型,當獲取數(shù)據(jù)時返回的也是?interface{}?類型,若需要轉(zhuǎn)換為其他的類型可以通過?gcache?的?Get*?方法便捷獲取常見類型。注意,如果您確定知道自己使用的是內(nèi)存緩存,那么可以直接使用斷言方式對返回的?interface{}?變量進行類型轉(zhuǎn)換,否則建議通過獲取到的泛型對象對應方法完成類型轉(zhuǎn)換。 - 另外需要注意的是,?
gcache?的緩存過期時間參數(shù)?duration?的類型為?time.Duration?類型,在?Set?緩存變量時,如果緩存時間參數(shù)?duration = 0?表示不過期,?duration < 0?表示立即過期,?duration > 0?表示超時過期。
注意事項
關于鍵名數(shù)據(jù)類型
大家可以發(fā)現(xiàn)緩存組件中關于鍵值對的數(shù)據(jù)類型都是?interface{}?,這種設計主要是為了考慮通用性和易用性,但是使用上需要注意?interface{}?的比較:只有數(shù)據(jù)和類型都相等才算真正匹配。我們來看個例子。
package main
import (
"fmt"
"github.com/gogf/gf/v2/os/gcache"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
key1 int32 = 1
key2 float64 = 1
value = `value`
)
_ = gcache.Set(ctx, key1, value, 0)
fmt.Println(gcache.MustGet(ctx, key1).Val())
fmt.Println(gcache.MustGet(ctx, key2).Val())
}執(zhí)行后,終端輸出:
value
可以看到,雖然?key1?和?key2?的數(shù)值都是相同的,但是兩者類型不同,因此通過?key2?無法獲取到鍵值。
關于獲取對象鍵值
由于鍵值的類型也是?interface{}?,往往在獲取后會通過類型轉(zhuǎn)換為需要的數(shù)據(jù)類型。常見的類型轉(zhuǎn)換是直接使用類型斷言,這種做法有種風險,就是由于?gcache?組件采用適配器接口設計模式,因此底層的實現(xiàn)上(除了默認的內(nèi)存適配器)往往會改變原有的數(shù)據(jù)類型(非內(nèi)存實現(xiàn)往往都會涉及到序列化/反序列化存儲),因此不推薦大家直接使用類型斷言進行數(shù)據(jù)類型轉(zhuǎn)換。
因此緩存組件在獲取鍵值上做了改進,并不是直接返回?interface{}?的鍵值類型,而是以框架泛型?*gvar.Var?對象返回,開發(fā)者根據(jù)業(yè)務場景轉(zhuǎn)換為所需的數(shù)據(jù)類型。特別是針對于對象緩存存儲和讀取的場景特別有用,我們來看一個示例:
package main
import (
"fmt"
"github.com/gogf/gf/v2/os/gcache"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
type User struct {
Id int
Name string
Site string
}
var (
ctx = gctx.New()
user *User
key = `UserKey`
value = &User{
Id: 1,
Name: "GoFrame",
Site: "https://goframe.org",
}
)
err := gcache.Set(ctx, key, value, 0)
if err != nil {
panic(err)
}
v, err := gcache.Get(ctx, key)
if err != nil {
panic(err)
}
if err = v.Scan(&user); err != nil {
panic(err)
}
fmt.Printf(`%#v`, user)
}執(zhí)行后,終端輸出:
&main.User{Id:1, Name:"GoFrame", Site:"https://goframe.org"} 當前名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame緩存管理-基本介紹
網(wǎng)站鏈接:http://m.fisionsoft.com.cn/article/dhhhjoe.html


咨詢
建站咨詢
