對(duì)于開源社區(qū),最近的一大新聞就是Redis宣布從7.4版本開始,將采用Redis源代碼可用許可證(RSALv2)和服務(wù)器端公共許可證(SSPLv1)的雙重許可證,取代原有的BSD三條款許可證。這一變化引發(fā)了開發(fā)者社區(qū)的熱烈討論,同時(shí)也為微軟的新開源項(xiàng)目Garnet帶來了更多的關(guān)注。那么,Garnet究竟是什么?它與Redis有何關(guān)系?讓我們一起來探討。
1. Garnet是什么?
Garnet是微軟研究院的新開源項(xiàng)目,它是一個(gè)遠(yuǎn)程緩存存儲(chǔ),提供了一系列獨(dú)特的優(yōu)勢(shì)。Garnet采用了Redis的RESP協(xié)議作為起點(diǎn),這使得開發(fā)者可以使用大多數(shù)編程語言中現(xiàn)成的Redis客戶端,例如 .NET 中的StackExchange.Redis,來使用Garnet。相比于其他開源緩存存儲(chǔ),Garnet在性能、延遲、可擴(kuò)展性和持久性方面有顯著的提升。
2. Garnet的特點(diǎn)
Garnet的特點(diǎn)可以概括為以下幾點(diǎn):
-
兼容性:Garnet采用了RESP協(xié)議,這使得它可以與大多數(shù)現(xiàn)有的Redis客戶端無縫對(duì)接。
-
高性能:Garnet提供了更好的吞吐量和可擴(kuò)展性,尤其在處理大量客戶端連接和小批量數(shù)據(jù)時(shí),相比于其他開源緩存存儲(chǔ),Garnet的性能有顯著提升。
-
低延遲:Garnet在普通云(例如Azure)虛擬機(jī)上,使用加速TCP,可以實(shí)現(xiàn)極低的客戶端延遲,這對(duì)于實(shí)際應(yīng)用場(chǎng)景至關(guān)重要。
-
跨平臺(tái):Garnet基于最新的.NET技術(shù),可以在Linux和Windows上運(yùn)行,同時(shí),它也非常易于開發(fā)和擴(kuò)展,而不會(huì)犧牲性能。
-
豐富的API:Garnet實(shí)現(xiàn)了一系列API,包括原始字符串操作(例如gets、sets和key expiration)、分析操作(例如HyperLogLog和Bitmap)、對(duì)象操作(例如sorted sets和lists)等。此外,它還支持用戶定義自定義操作,降低了開發(fā)自定義擴(kuò)展的難度。
-
安全性:Garnet支持使用.NET的SslStream庫(kù)進(jìn)行安全的傳輸層安全(TLS)通信,同時(shí)提供基本的訪問控制。
-
持久性和可恢復(fù)性:Garnet的存儲(chǔ)層,稱為Tsavorite,支持線程可擴(kuò)展性、分層存儲(chǔ)(內(nèi)存、SSD和云存儲(chǔ))、快速非阻塞檢查點(diǎn)、恢復(fù)、操作日志記錄以及多鍵事務(wù)支持等強(qiáng)大的數(shù)據(jù)庫(kù)功能。
-
集群模式:Garnet支持集群模式,可以進(jìn)行分片、復(fù)制和動(dòng)態(tài)鍵遷移。
3. Garnet與Redis的關(guān)系
Garnet并非是要取代Redis,而是提供了一個(gè)與Redis兼容的、具有一些獨(dú)特優(yōu)勢(shì)的選擇。與Redis不同的是,Garnet是基于.NET技術(shù)構(gòu)建的,這使得它在性能和可擴(kuò)展性上有所提升,同時(shí)也使得它更易于開發(fā)和擴(kuò)展。
在Redis宣布許可證變更的同時(shí),微軟發(fā)布了Garnet,這無疑給開發(fā)者社區(qū)提供了一個(gè)新的選擇。對(duì)于那些不希望或無法接受Redis新的許可證政策的用戶,Garnet可能是一個(gè)不錯(cuò)的替代方案。
4. Garnet的部署和使用
Garnet 開源地址:https://github.com/microsoft/garnet?WT.mc_id=DT-MVP-5005195 。開發(fā)者可以通過該地址獲取Garnet的源代碼,并了解更多關(guān)于Garnet的信息。
4.1 服務(wù)部署
Garnet的服務(wù)部署非常簡(jiǎn)單,Garnet是基于.NET技術(shù)構(gòu)建的,也提供了多種部署方式供開發(fā)者靈活的選擇。你可以直接將其作為獨(dú)立的服務(wù)自行編譯部署,也可以通過 Nugget 包的方式引入并集成到你的項(xiàng)目中,當(dāng)然官方也貼心的提供了多種 Dockerfile 方便開發(fā)者快速部署。這里我們簡(jiǎn)單介紹一下如何編譯并運(yùn)行 Garnet 服務(wù)和如何通過客戶端使用。
4.1.1 源碼構(gòu)建
首先,你需要安裝 .NET SDK,然后通過 Git 將 Garnet 的源碼克隆到本地:
git clone git@github.com:microsoft/garnet.git
cd garnet
dotnet restore
cd main/GarnetServer
dotnet run -c Release -f net8.0
通過上面的命令我們即可快速的啟動(dòng)一個(gè) Garnet 服務(wù),默認(rèn)情況下,Garnet 偵聽 TCP 端口 3278。
當(dāng)然我們也可以編譯成一個(gè)獨(dú)立的可執(zhí)行文件,以下是編譯 win-x64
平臺(tái)的示例命令:
dotnet publish -c Release -f net8.0 -r win-x64 -o=publish/win-x64 -p:PublishSingleFile=true -p:PublishTrimmed=true
4.1.2 客戶端使用
使用 Garnet 的客戶端非常簡(jiǎn)單,只需要按照 Redis 客戶端庫(kù)的使用方式無縫切換即可。這里我們以 C# 為例,使用 StackExchange.Redis 客戶端庫(kù)來連接 Garnet 服務(wù)。
首先,我們需要安裝 StackExchange.Redis 客戶端庫(kù):
dotnet add package StackExchange.Redis
然后,我們可以通過以下代碼來連接 Garnet 服務(wù)并進(jìn)行操作:
using System;
using StackExchange.Redis;
class Program
{
static void Main(string[] args)
{
var connection = ConnectionMultiplexer.Connect("localhost:3278");
var db = connection.GetDatabase();
db.StringSet("key", "value");
var value = db.StringGet("key");
Console.WriteLine(value);
}
}
以上只是簡(jiǎn)單的使用,如果你需要集群等更復(fù)雜的配置,請(qǐng)查閱官方文檔。
5. 兼容性
需要注意的是,Garnet雖然兼容Redis的RESP協(xié)議,但并不是完全兼容Redis的所有功能。在使用Garnet時(shí),開發(fā)者需要注意一些細(xì)節(jié),例如Garnet不支持Redis的一些命令、數(shù)據(jù)結(jié)構(gòu)和特性,這可能會(huì)對(duì)一些應(yīng)用場(chǎng)景造成影響。因此,在使用Garnet時(shí),開發(fā)者需要根據(jù)自己的實(shí)際需求進(jìn)行選擇。具體的兼容性問題,可以參考Garnet的官方文檔關(guān)于兼容性的描述。文章來源:http://www.zghlxwxcb.cn/news/detail-844466.html
6. 結(jié)論
作為微軟的新開源項(xiàng)目,Garnet無疑為開發(fā)者社區(qū)帶來了新的可能性。它的出現(xiàn)并非要取代Redis,而是提供了一個(gè)與Redis兼容的、具有一些獨(dú)特優(yōu)勢(shì)的選擇。對(duì)于開發(fā)者來說,Garnet的出現(xiàn)無疑為他們提供了更多的選擇,而這對(duì)于開源社區(qū)的發(fā)展來說,無疑是一件好事。如果你正在尋找一個(gè)Redis的替代方案,那么Garnet可能是一個(gè)不錯(cuò)的選擇。文章來源地址http://www.zghlxwxcb.cn/news/detail-844466.html
到了這里,關(guān)于微軟開源項(xiàng)目Garnet:Redis的競(jìng)爭(zhēng)者還是替代者?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!