日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame緩存管理-基本介紹

基本介紹

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

成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗。創(chuàng)新互聯(lián)多年互聯(lián)網(wǎng)經(jīng)驗,見的多,溝通容易、能幫助客戶提出的運營建議。作為成都一家網(wǎng)絡公司,打造的就是網(wǎng)站建設(shè)產(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

簡要介紹:

  1. ?gcache?默認提供默認的高速內(nèi)存緩存對象,可以通過包方法操作內(nèi)存緩存,也可以通過?New?方法創(chuàng)建內(nèi)存緩存對象。在通過包方法使用緩存功能時,操作的是?gcache?默認提供的一個?gcache.Cache?對象,具有全局性,因此在使用時注意全局鍵名的覆蓋。
  2. ?gcache?使用的鍵名類型是?interface{}?,而不是?string?類型,這意味著我們可以使用任意類型的變量作為鍵名,但大多數(shù)時候建議使用?string?或者?[]byte?作為鍵名,并且統(tǒng)一鍵名的數(shù)據(jù)類型,以便維護。
  3. ?gcache?存儲的鍵值類型是?interface{}?,也就是說可以存儲任意的數(shù)據(jù)類型,當獲取數(shù)據(jù)時返回的也是?interface{}?類型,若需要轉(zhuǎn)換為其他的類型可以通過?gcache?的?Get*?方法便捷獲取常見類型。注意,如果您確定知道自己使用的是內(nèi)存緩存,那么可以直接使用斷言方式對返回的?interface{}?變量進行類型轉(zhuǎn)換,否則建議通過獲取到的泛型對象對應方法完成類型轉(zhuǎn)換。
  4. 另外需要注意的是,?gcache?的緩存過期時間參數(shù)?duration?的類型為?time.Duration?類型,在?Set?緩存變量時,如果緩存時間參數(shù)?duration = 0?表示不過期,?duration < 0?表示立即過期,?duration > 0?表示超時過期。

注意事項

關(guān)于鍵名數(shù)據(jù)類型

大家可以發(fā)現(xiàn)緩存組件中關(guān)于鍵值對的數(shù)據(jù)類型都是?interface{}?,這種設(shè)計主要是為了考慮通用性和易用性,但是使用上需要注意?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?無法獲取到鍵值。

關(guān)于獲取對象鍵值

由于鍵值的類型也是?interface{}?,往往在獲取后會通過類型轉(zhuǎn)換為需要的數(shù)據(jù)類型。常見的類型轉(zhuǎn)換是直接使用類型斷言,這種做法有種風險,就是由于?gcache?組件采用適配器接口設(shè)計模式,因此底層的實現(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)站URL:http://m.5511xx.com/article/dhhhjoe.html