欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang基于內存的鍵值存儲緩存庫go-cache

 更新時間:2025年03月04日 11:30:05   作者:李若盛開  
go-cache是一個內存中的key:value store/cache庫,適用于單機應用程序,本文主要介紹了Golang基于內存的鍵值存儲緩存庫go-cache,具有一定的參考價值,感興趣的可以了解一下

go-cache是一種內存中的key:value store/cache庫,類似于Memcached,適用于在一臺機器上運行的應用程序(單機應用程序)。

文檔

https://pkg.go.dev/github.com/patrickmn/go-cache
https://github.com/patrickmn/go-cache
https://patrickmn.com/projects/go-cache/

安裝

go get github.com/patrickmn/go-cache

方法

func New(defaultExpiration, cleanupInterval time.Duration) *Cache

func (c *cache) Set(k string, x interface{}, d time.Duration)

func (c *cache) Get(k string) (interface{}, bool)

示例1

import (
    "fmt"
    "time"

    "github.com/patrickmn/go-cache"
)

func main() {
    // 設置默認過期時間10秒;清理間隔30分鐘
    caching := cache.New(<strong>10*time.Second</strong>, 30*time.Minute)

    // 設置過期時間
    caching.Set("k1", "v1", 10*time.Second)
   <strong>time.Sleep(</strong><strong>5 * time.Second)
</strong>  // 獲取數據
    value, ok := caching.Get("k1")

    if !ok {
        fmt.Println("ok值為", ok)
    }
    fmt.Printf("k1對應的值是: %v\n", value)
}

示例2

import (
    "fmt"
    "time"

    "github.com/patrickmn/go-cache"
)

func main() {
    // 設置默認過期時間10秒;清理間隔30分鐘
    caching := cache.New(<strong>10*time.Second</strong>, 30*time.Minute)

    // 設置過期時間
    caching.Set("k1", "v1", 10*time.Second)
    <strong>time.Sleep(</strong><strong>15 * time.Second)
</strong>  // 獲取數據
    value, ok := caching.Get("k1")

    if !ok {
        fmt.Println("ok值為", ok)
    }
    fmt.Printf("k1對應的值是: %v\n", value)
}

使用注意點

1)盡量存放那些相對不怎么變化的數據, 適用于所有的 local cache(包括 map, sync.map)

2)go-cache 的過期檢查時間要設置相對較小, 也不能過小

3)那些高 QPS 的接口盡量不要去直接 Set 數據, 如果必須 Set 可以采用異步操作

4)監(jiān)控 go-cache 里面 key 的數量, 如果過多時, 需要及時調整參數

優(yōu)點

(主要優(yōu)點:本質上是一個具有過期時間的線程安全的 map[string]interface{},它不需要序列化或通過網絡傳輸其內容)

1)簡單易用,適合快速集成到現有項目中;
2)支持過期時間,可以自動淘汰過期的緩存項;
3)支持多種數據類型的緩存;

缺點

1)性能略低于其他庫,不適合高并發(fā)讀寫的場景;
2)不支持分布式緩存。

注意

go-cache是一個內存緩存庫,它主要用于單進程內的緩存操作。這意味著如果在服務 A 中設置了某個鍵值對,服務 B 無法直接訪問服務 A 的緩存實例,因為它們是獨立的進程,每個進程都有自己的緩存實例。
如果希望在多個服務之間共享緩存數據,需要使用一個分布式的緩存解決方案,例如 Redis、Memcached 或其他支持分布式緩存的系統(tǒng)。這些系統(tǒng)可以在多個服務之間共享數據,并且支持跨服務的數據一致性。

go-cache 和 redis 緩存對比

1)功能特性:

Go Cache 是一個 Go 語言的內存緩存庫,使用起來非常簡單,適合處理輕量級緩存需求。它提供了基本的 Get、Set、Delete 等緩存操作接口,并支持緩存過期時間和自動清理過期緩存。但是,它只能存儲在內存中,無法持久化到磁盤,不適用于大規(guī)模數據和高并發(fā)場景。

Redis 是一個基于內存的高性能鍵值存儲系統(tǒng),支持多種數據結構、高并發(fā)訪問和持久化等功能。Redis 除了支持基本的 Get、Set、Delete 等操作外,還支持多種高級特性,如發(fā)布/訂閱、事務、Lua 腳本等。Redis 的持久化機制包括 RDB 和 AOF 兩種方式,可以保證數據不會因服務器重啟或宕機而丟失。Redis 還支持分布式架構,可以通過主從復制和集群等方式進行數據分片和高可用性保障。

2)性能表現:

由于 Go Cache 是一個純內存緩存,因此在處理輕量級數據時,性能較為優(yōu)秀,適合處理小規(guī)模數據和短期存儲需求。

Redis 的性能則相對更為出色,尤其是在處理大規(guī)模數據和高并發(fā)訪問時,Redis 的性能表現更為卓越。Redis 的數據結構支持多種類型,包括字符串、列表、哈希、集合和有序集合等,可以滿足不同應用場景的需求。

3)適用場景:

Go Cache 適用于輕量級的應用場景,比如 Web 應用中的頁面片段、會話信息等短期存儲數據。

Redis 則適用于更加復雜的應用場景,比如高并發(fā)的 Web 應用、數據分析、實時計算、消息隊列等。

綜上所述,Go Cache 和 Redis 都是優(yōu)秀的緩存解決方案,但是它們的功能特性、性能表現和適用場景略有不同。如果應用場景是輕量級的、短期存儲的數據,可以選擇 Go Cache;如果需要處理大規(guī)模的、高并發(fā)訪問的數據,可以選擇 Redis。

到此這篇關于Golang基于內存的鍵值存儲緩存庫 go-cache的文章就介紹到這了,更多相關Golang緩存庫 go-cache內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入理解Go語言實現多態(tài)?

    深入理解Go語言實現多態(tài)?

    本文主要介紹了Go語言實現多態(tài),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • go+redis實現消息隊列發(fā)布與訂閱的詳細過程

    go+redis實現消息隊列發(fā)布與訂閱的詳細過程

    這篇文章主要介紹了go+redis實現消息隊列發(fā)布與訂閱,redis做消息隊列的缺點:沒有持久化,一旦消息沒有人消費,積累到一定程度后就會丟失,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Golang實現常見的限流算法的示例代碼

    Golang實現常見的限流算法的示例代碼

    限流是項目中經常需要使用到的一種工具,一般用于限制用戶的請求的頻率,也可以避免瞬間流量過大導致系統(tǒng)崩潰,或者穩(wěn)定消息處理速率,本文主要介紹了使用Go實現常見的限流算法,希望對大家有所幫助
    2023-04-04
  • GOLANG使用Context管理關聯(lián)goroutine的方法

    GOLANG使用Context管理關聯(lián)goroutine的方法

    這篇文章主要介紹了GOLANG使用Context管理關聯(lián)goroutine的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Golang實現基于時間的一次性密碼TOTP

    Golang實現基于時間的一次性密碼TOTP

    基于時間的一次性密碼 TOTP 是 OTP 的一種實現方式,這種方法的優(yōu)點是不依賴網絡,因此即使在沒有網絡的情況下,用戶也可以生成密碼,下面我們就來看看如何使用golang實現一次性密碼TOTP吧
    2023-11-11
  • go xorm框架的使用

    go xorm框架的使用

    xorm框架和Spring Data Jpa有點相似,可以對比學習,對于這個框架感覺還不錯,閑暇時間學習一下
    2021-05-05
  • Go語言中的goroutine和channel如何協(xié)同工作

    Go語言中的goroutine和channel如何協(xié)同工作

    在Go語言中,goroutine和channel是并發(fā)編程的兩個核心概念,它們協(xié)同工作以實現高效、安全的并發(fā)執(zhí)行,本文將詳細探討goroutine和channel如何協(xié)同工作,以及它們在并發(fā)編程中的作用和優(yōu)勢,需要的朋友可以參考下
    2024-04-04
  • go語言實現簡易比特幣系統(tǒng)錢包的原理解析

    go語言實現簡易比特幣系統(tǒng)錢包的原理解析

    這篇文章主要介紹了go語言實現簡易比特幣系統(tǒng)錢包的原理解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • golan參數校驗Validator

    golan參數校驗Validator

    這篇文章主要介紹了golan參數校驗Validator,validator包可以通過反射結構體struct的tag進行參數校驗,下面來看看文章的詳細介紹吧,需要的朋友也可以參考一下
    2021-12-12
  • golang中defer的關鍵特性示例詳解

    golang中defer的關鍵特性示例詳解

    defer是golang語言中的關鍵字,用于資源的釋放,會在函數返回之前進行調用。下面這篇文章主要給大家介紹了關于golang中defer的關鍵特性,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-08-08

最新評論