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
PIG 微服務開發平台:
https://gitee.com/log4j/pig