微软开源项目Garnet:Redis的竞争者还是替代者?

对于开源社区,最近的一大新闻就是Redis宣布从7.4版本开始,将采用Redis源代码可用许可证(RSALv2)和服务器端公共许可证(SSPLv1)的双重许可证,取代原有的BSD三条款许可证。这一变化引发了开发者社区的热烈讨论,同时也为微软的新开源项目Garnet带来了更多的关注。那么,Garnet究竟是什么?它与Redis有何关系?让我们一起来探讨。

1. Garnet是什么?

Garnet是微软研究院的新开源项目,它是一个远程缓存存储,提供了一系列独特的优势。Garnet采用了Redis的RESP协议作为起点,这使得开发者可以使用大多数编程语言中现成的Redis客户端,例如 .NET 中的StackExchange.Redis,来使用Garnet。相比于其他开源缓存存储,Garnet在性能、延迟、可扩展性和持久性方面有显著的提升。

在这里插入图片描述

2. Garnet的特点

Garnet的特点可以概括为以下几点:

  1. 兼容性:Garnet采用了RESP协议,这使得它可以与大多数现有的Redis客户端无缝对接。

  2. 高性能:Garnet提供了更好的吞吐量和可扩展性,尤其在处理大量客户端连接和小批量数据时,相比于其他开源缓存存储,Garnet的性能有显著提升。

  3. 低延迟:Garnet在普通云(例如Azure)虚拟机上,使用加速TCP,可以实现极低的客户端延迟,这对于实际应用场景至关重要。

  4. 跨平台:Garnet基于最新的.NET技术,可以在Linux和Windows上运行,同时,它也非常易于开发和扩展,而不会牺牲性能。

  5. 丰富的API:Garnet实现了一系列API,包括原始字符串操作(例如gets、sets和key expiration)、分析操作(例如HyperLogLog和Bitmap)、对象操作(例如sorted sets和lists)等。此外,它还支持用户定义自定义操作,降低了开发自定义扩展的难度。

  6. 安全性:Garnet支持使用.NET的SslStream库进行安全的传输层安全(TLS)通信,同时提供基本的访问控制。

  7. 持久性和可恢复性:Garnet的存储层,称为Tsavorite,支持线程可扩展性、分层存储(内存、SSD和云存储)、快速非阻塞检查点、恢复、操作日志记录以及多键事务支持等强大的数据库功能。

  8. 集群模式:Garnet支持集群模式,可以进行分片、复制和动态键迁移。

3. Garnet与Redis的关系

Garnet并非是要取代Redis,而是提供了一个与Redis兼容的、具有一些独特优势的选择。与Redis不同的是,Garnet是基于.NET技术构建的,这使得它在性能和可扩展性上有所提升,同时也使得它更易于开发和扩展。

在Redis宣布许可证变更的同时,微软发布了Garnet,这无疑给开发者社区提供了一个新的选择。对于那些不希望或无法接受Redis新的许可证政策的用户,Garnet可能是一个不错的替代方案。

4. Garnet的部署和使用

Garnet 开源地址:https://github.com/microsoft/garnet?WT.mc_id=DT-MVP-5005195 。开发者可以通过该地址获取Garnet的源代码,并了解更多关于Garnet的信息。

4.1 服务部署

Garnet的服务部署非常简单,Garnet是基于.NET技术构建的,也提供了多种部署方式供开发者灵活的选择。你可以直接将其作为独立的服务自行编译部署,也可以通过 Nugget 包的方式引入并集成到你的项目中,当然官方也贴心的提供了多种 Dockerfile 方便开发者快速部署。这里我们简单介绍一下如何编译并运行 Garnet 服务和如何通过客户端使用。

4.1.1 源码构建

首先,你需要安装 .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

通过上面的命令我们即可快速的启动一个 Garnet 服务,默认情况下,Garnet 侦听 TCP 端口 3278。

在这里插入图片描述

当然我们也可以编译成一个独立的可执行文件,以下是编译 win-x64 平台的示例命令:

dotnet publish -c Release -f net8.0 -r win-x64 -o=publish/win-x64 -p:PublishSingleFile=true -p:PublishTrimmed=true

4.1.2 客户端使用

使用 Garnet 的客户端非常简单,只需要按照 Redis 客户端库的使用方式无缝切换即可。这里我们以 C# 为例,使用 StackExchange.Redis 客户端库来连接 Garnet 服务。

首先,我们需要安装 StackExchange.Redis 客户端库:

dotnet add package StackExchange.Redis

然后,我们可以通过以下代码来连接 Garnet 服务并进行操作:

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);
    }
}

以上只是简单的使用,如果你需要集群等更复杂的配置,请查阅官方文档

5. 兼容性

需要注意的是,Garnet虽然兼容Redis的RESP协议,但并不是完全兼容Redis的所有功能。在使用Garnet时,开发者需要注意一些细节,例如Garnet不支持Redis的一些命令、数据结构和特性,这可能会对一些应用场景造成影响。因此,在使用Garnet时,开发者需要根据自己的实际需求进行选择。具体的兼容性问题,可以参考Garnet的官方文档关于兼容性的描述

6. 结论

作为微软的新开源项目,Garnet无疑为开发者社区带来了新的可能性。它的出现并非要取代Redis,而是提供了一个与Redis兼容的、具有一些独特优势的选择。对于开发者来说,Garnet的出现无疑为他们提供了更多的选择,而这对于开源社区的发展来说,无疑是一件好事。如果你正在寻找一个Redis的替代方案,那么Garnet可能是一个不错的选择。

相关推荐

  1. 生成式人工智能:助攻开发取代开发

    2024-03-27 07:14:01       28 阅读
  2. AI究竟在帮助开发取代他们?

    2024-03-27 07:14:01       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 07:14:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 07:14:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 07:14:01       87 阅读
  4. Python语言-面向对象

    2024-03-27 07:14:01       96 阅读

热门阅读

  1. 【Django】枚举类型数据

    2024-03-27 07:14:01       37 阅读
  2. 微服务设计原则——低风险

    2024-03-27 07:14:01       35 阅读
  3. 滴滴出行高级Node.js开发工程师笔试题2024

    2024-03-27 07:14:01       42 阅读
  4. 【Mysql】更新脚本SQL——新增删除修改字段

    2024-03-27 07:14:01       38 阅读
  5. day29【LeetCode力扣】15.三数之和

    2024-03-27 07:14:01       39 阅读
  6. js对比日期大小

    2024-03-27 07:14:01       42 阅读
  7. 搭建服务器 - 笔记

    2024-03-27 07:14:01       33 阅读
  8. Spark SQL DataFrame

    2024-03-27 07:14:01       44 阅读
  9. 类模板分文件编写

    2024-03-27 07:14:01       41 阅读
  10. 3.23Code

    2024-03-27 07:14:01       32 阅读
  11. Hive-技术补充-ANTLR语法编写

    2024-03-27 07:14:01       41 阅读
  12. 力扣每日练习(3.26)

    2024-03-27 07:14:01       42 阅读
  13. python怎样打开一个pdf文件?

    2024-03-27 07:14:01       43 阅读