成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

沒想到 GoFrame 的 Gcache 天然支持緩存淘汰策略

存儲
這篇文章通過結合商業項目的使用場景,為大家介紹了gcache的基本使用、緩存控制以及淘汰策略。

先說結論

這篇文章通過結合商業項目的使用場景,為大家介紹了gcache的基本使用、緩存控制以及淘汰策略。

使用gcache做緩存處理,簡單方便易上手!

優勢

gcache模塊默認提供的是一個高速的內存緩存,操作效率非常高效,CPU性能損耗在ns納秒級別。使用簡單易上手,非常適合單機應用使用。

基本使用

我們可以通過gcache.New()創建一個緩存對象

也可以直接使用gcache包方法,使用方式都是一樣的。

下面代碼段介紹了gcache的基本使用:

package main

import (
"fmt"
"github.com/gogf/gf/os/gcache"
"github.com/gogf/gf/os/gtime"
)

func main() {
// 創建一個緩存對象,
c := gcache.New()
// 設置緩存,不過期
_ = c.Set("k1", "v1", 0)

// 獲取緩存
v, _ := c.Get("k1")
fmt.Println("k1對應的值:", 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

// 關閉緩存對象,讓GC回收資源
_ = c.Close()

// 當然也可以便捷地直接使用gcache包方法,使用方式和上面的一樣
_ = gcache.Set("k2", "v2", gtime.M*30) //半小時后到期
k2Value, _ := gcache.Get("k2")
fmt.Println("k2對應的值:", k2Value) //v2
}

打印結果

緩存控制

下面介紹一些特殊場景的用法:

當鍵名不存在時寫入:SetIfNotExist。

根據鍵名取不到值時寫入:GetOrSet。

package main

import (
"fmt"
"github.com/gogf/gf/os/gcache"
"time"
)

func main() {
// 當鍵名不存在時寫入,設置過期時間1秒
_, _ = gcache.SetIfNotExist("k1", "v1", time.Second)

// 打印當前的鍵名列表
keys, _ := gcache.Keys()
fmt.Println("打印當前的鍵名列表:", keys) //[k1]

// 打印當前的鍵值列表
values, _ := gcache.Values()
fmt.Println("打印當前的鍵值列表:", values) //[v1]

// 獲取指定鍵值,如果不存在時寫入,并返回鍵值;第三個參數設置為0表示永不過期
v, _ := gcache.GetOrSet("k2", "v2", 0)
fmt.Println("寫入的鍵值:", v) //v2

// 打印當前的鍵值對
dataMap, _ := gcache.Data()
fmt.Println("打印當前的鍵值對:", dataMap) // map[k1:v1 k2:v2]

// 等待1秒,以便k1:v1自動過期
time.Sleep(time.Second)

// 再次打印當前的鍵值對,發現k1:v1已經過期,只剩下k2:v2
data2, _ := gcache.Data()
fmt.Println("等待一秒后,打印當前的鍵值對:", data2) // map[k2:v2]
}

打印結果

緩存淘汰策略

之前做項目的時候也有這么設計過,現在gcache天然支持緩存淘汰策略

實戰舉例

給大家舉個項目中的例子:

比如我有一個新聞網站,為了保證新聞詳情頁的加載速度,會把新聞詳情頁做緩存處理(內容緩存,評論點贊等動態獲取。)

一般來說新產生的新聞熱度和訪問量會更高,需要做緩存,而陳舊的新聞因為熱度不再,訪問量較低就從緩存中釋放了。

解決上面的問題一般有2種思路:

  1. 設置緩存時間是一個解決思路
  2. 另外的思路就是設置緩存的淘汰策略。

比如:我一共允許緩存1萬個緩存詳情頁,當超過1萬個時,會淘汰掉最早緩存的數據,實現動態且穩定的緩存策略。

gcache天然支持這種緩存淘汰策略

代碼示例

下面舉個簡單的例子:

package main

import (
"fmt"
"github.com/gogf/gf/os/gcache"
"time"
)

func main() {
// 設置LRU淘汰數量
c := gcache.New(2)

// 添加10個元素,不過期
for i := 0; i < 10; i++ {
_ = c.Set(i, i, 0)
}
n, _ := c.Size()
fmt.Println("緩存大?。?, n)
keys, _ := c.Keys()
fmt.Println("緩存鍵值:", keys)

// 讀取鍵名1,保證該鍵名是優先保留
v, _ := c.Get(1)
fmt.Println("讀取鍵名1的值:", v)

// 等待一定時間后(默認1秒檢查一次)
// 元素會被按照從舊到新的順序進行淘汰
for i := 0; i < 10; i++ {
time.Sleep(2 * time.Second)
n, _ = c.Size()
fmt.Println("緩存大?。?, n)
keys, _ = c.Keys()
fmt.Println("緩存鍵值:", keys)
}
}

打印結果

小技巧

GetOrSetFunc的使用

GetOrSetFunc獲取一個緩存值,當緩存不存在時執行指定的f func() (interface{}, error),緩存該f方法的結果值,并返回該結果。

總結

這篇文章通過結合商業項目的使用場景,為大家介紹了gcache的基本使用、緩存控制以及淘汰策略。

單機項目可以使用gcache做緩存處理,簡單方便易上手;

分布式應用可以使用gredis做緩存處理,關注我,下一篇介紹gredis的使用。

本文轉載自微信公眾號「 程序員升級打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關注。

轉載本文請聯系「 程序員升級打怪之旅」公眾號。

責任編輯:武曉燕 來源: 程序員升級打怪之旅
相關推薦

2018-01-26 23:23:23

JDBC MySQL數據庫

2021-01-27 18:13:35

日志nginx信息

2017-12-26 15:41:26

2022-03-21 08:55:53

RocketMQ客戶端過濾機制

2012-12-28 13:47:36

Raspberry PGeek

2017-02-09 17:00:00

iOSSwiftKVC

2022-01-05 17:13:28

監控HTTPS網站

2019-03-08 10:08:41

網絡程序猿代碼

2020-08-14 08:19:25

Shell命令行數據

2021-11-29 05:37:24

Windows Def操作系統微軟

2009-04-28 07:48:29

蓋茨打工基金會

2018-12-26 09:44:02

分布式緩存本地緩存

2023-09-07 06:48:38

Intel顯卡AMD

2018-10-22 15:29:50

2020-12-31 06:12:38

Siri Windows電腦

2023-10-31 12:29:25

模型訓練

2021-08-12 06:52:02

谷歌面試ArrayList

2023-09-08 06:39:33

NVIDIA顯卡行業

2023-02-26 00:00:02

字符串分割String

2021-02-25 17:58:26

Python 開發編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩视频一区二区 | 日韩欧美综合 | 91中文字幕在线观看 | 日韩欧美在线观看 | 久久国产麻豆 | 亚洲视频在线一区 | 九九热在线精品视频 | 成人欧美一区二区三区黑人孕妇 | 国产一级网站 | av免费网址 | 日本在线网站 | 国产精品一区二区三级 | 中文字幕在线一区二区三区 | 成人av播放| 亚洲成人久久久 | 澳门永久av免费网站 | 久久亚洲精品视频 | 欧美自拍另类 | 久草新视频 | 在线观看中文字幕一区二区 | 日本成人免费网站 | 欧美日韩在线观看视频 | 国产精品99久久久久久动医院 | 一级片免费网站 | 午夜视频在线 | 日韩精品在线观看一区二区 | 日韩快播电影网 | 国产成人精品一区二 | 激情麻豆视频 | 秋霞影院一区二区 | 色吊丝2| av片在线观看 | 日本精品一区二区 | 亚洲男人的天堂网站 | 免费观看黄网站 | 欧美色性 | 欧美一二三四成人免费视频 | 久久av网站 | 在线国产一区二区 | 精品日韩 | 中文字幕1区 |