當前位置: 妍妍網 > 碼農

可平替 Redis ,微軟開源 Garnet 緩存

2024-03-21碼農

garnet 是什麽

最近,微軟正式開源了緩存儲存系統 Garnet [1] 。據微軟官方介紹,Garnet 計畫是從零開始采用 C# 構建的,註重效能(尤其是吞吐量中的執行緒可延伸性和更高比例的低延遲水平)。

Garnet 比 Redis 更優秀的原因主要是它針對現代硬體進行了最佳化。Garnet 設計時考慮了現代多核處理器和高速網路的特點,使其在處理大量客戶端連線和小批次數據時能夠提供更高的吞吐量和更低的延遲。此外,Garnet 的架構使得它能夠更有效地利用處理器緩存,從而提高效能。這些最佳化使得 Garnet 在現實的網路環境中表現更加出色。--FROM InfoQ

安裝

  • 目前 garnet 只提供了 nupkg 的依賴包,暫未提供官方的映像下載地址,筆者已在 Visual Studio 2022 編譯 x86 已上傳至 dockerhub

  • docker run -p 3278:3278 -d pig4cloud/garnet:latest

    測試使用

  • 使用原生的 redis-cli 客戶端即可連結 Garnet , 相容 redis 協定。

  •  ~  redis-cli -p 3278
    127.0.0.1:3278> info
    # Server
    garnet_version:1.0.0
    garnet_mode:standalone
    os:Unix 6.5.13.121
    processor_count:8
    arch_bits:64
    uptime_in_seconds:20.9056586
    uptime_in_days:0.0002419636412037037
    monitor_task:disabled
    monitor_freq:0
    latency_monitor:disabled
    run_id:6e00f92a00c16e2ad992353b7fef27d6a36e1a60
    ...

  • get set

  • 127.0.0.1:3278> set k1 v1
    OK
    127.0.0.1:3278> get k1
    "v1"

  • 命令支持列表

  • 關鍵詞
    BITMAP
    CLUSTER
    CONNECTION
    FUNCTIONS
    GENERIC
    GEO
    HASH
    HYPERLOGLOG
    KEYS
    LIST
    PUB/SUB
    SCRIPTING
    SERVER
    SET
    SORTED SET
    STREAM
    STRING
    TRANSACTIONS

    Java 計畫平替 Redis 操作

    這裏以 PIG 微服務開發平台 [2] 為例,計畫基本使用了 Redis 常見命令 SET HASH PUB/SUB 等:

  • 只需要修改配置檔中的 redis 的配置指向 Garnet Server 即可, 連結驅動保持 spring-boot-starter-data-redis 即 lettuce 不變。

  • 127.0.0.1:3278> keys *
    1) "k1"
    2) "client:details::pig"
    3) "menu_details::1"
    4) "menu_details::2"
    5) "user_details::admin"
    6) "token::refresh_token::skVN2wyPrH3SV607JOLau1MED6VdXH0WOojq1A57fH2EtL2kdTaEmaVd8n24aL89uCUTeR32fKrTXi07nCBBfXB5pNUNDs9eHWgl-AjCQLXd08Z8qK0RBNwk2nqsqCrM"
    7) "token::access_token::NGcjsiHNIAhdH0pSZwz2WTyKhxtzrFzjYCpO3MhG4nX2Nmsj9aqO6OVOlGvNGczAgYGztaU-3kTKpuyf7awUpMq7YbIDCNs8o2gIqqtGC2-dRGsJfj3wsGp834iRSQ9j"
    8) "DEFAULT_CODE_KEY:84156608-9595-46c6-93c4-990828437d16"
    (1.45s)

    總結

    官方表示: 任何「使用 Redis、KeyDB 或者 Dragonfly 作為緩存儲存方案的現有應用程式都適合 Garnet , 能提供更高的吞吐量、更低延遲、透過減少需要托管的緩存儲存分片來降低成本,還可將數據溢位至本地磁盤或 SSD 以緩存超過記憶體大小的數據。此外,Garnet 也適合各種希望借極高效能緩存層提高效能、降低後端儲存伺服器或資料庫成本的新型應用程式。」

    參考資料

    [1]

    Garnet: https://github.com/microsoft/garnet

    [2]

    PIG 微服務開發平台: https://gitee.com/log4j/pig