Garnet——开源的无损替代Redis的最强方案

文章讲述了Redis即将闭源后,微软推出了开源项目Garnet,兼容Redis并采用MIT协议。作者通过性能测试比较了Garnet与Redis在不同操作上的表现,发现Garnet在某些场景下表现出良好的性能,可能成为Redis的替代选项。
摘要由CSDN通过智能技术生成

Redis不再开源,后续使用3月20日以后的版本需要遵守新的协议。协议详情可以参考:

https://github.com/redis/redis?tab=License-1-ov-file#readme

以下是协议内容部分截图:

a6efc49d0c5901d3b6659d8c3063176f.png

微软在redis即将闭源的情况下,开源了它的一款替代性项目产品,叫garnet,兼容redis的所有操作方式和通讯协议。并且采用MIT开源协议。项目地址:

https://github.com/microsoft/garnet

MIT协议内容很简单,全部内容如图所示:

6d1767751a0b6d1050359373146e6254.png

先来个截取自官方文档的一个Garnet的一个简单介绍:

/***********
Garnet 是 Microsoft Research 推出的一种新型远程缓存存储,其设计速度极快、可扩展且延迟低。Garnet 在单个节点内是线程可扩展的。它还支持分片集群执行、复制、检查点、故障转移和事务。它可以在主内存以及分层存储(例如 SSD 和 Azure 存储)上运行。Garnet支持丰富的API接口和强大的可扩展性模型。
Garnet 使用 Redis 的 RESP 作为其主要线路协议。因此,人们可以将 Garnet 与 大多数编程语言中可用的未经修改的 Redis 客户端一起使用,例如 C# 中的StackExchange.Redis 。与其他开源缓存存储相比,您可以获得更好的性能、延迟、可扩展性和耐用性功能。
具有以下主要优点:
相对于同类开源缓存存储,小批量和许多客户端会话的服务器吞吐量(操作/秒)提高了几个数量级。
在 Windows 和 Linux 上启用加速 TCP 的商品云 (Azure) 计算机上,单次操作延迟极低(在 99.9% 时通常小于 300 微秒)。
随着客户端数量的增加,无论有或没有客户端批处理,都可以实现更好的可扩展性。
能够通过单个共享内存服务器实例使用服务器计算机的所有 CPU/内存资源(无需节点内集群)。
支持大于内存的数据集,溢出到本地和云存储设备。
数据库功能,例如快速检查点和恢复以及发布/订阅。
支持多节点分片哈希分区(Redis“集群”模式)、状态迁移和复制。
通过全面的测试套件进行了良好的测试(针对 Garnet 及其存储层 Tsavorite 进行了数千次单元测试)。
易于演变和扩展的 C# 代码库。
********/

既然是替代品,那么就要测试下性能是不是可以满足我们的日常所需。以下做个最简单的测试。我本地已有redis的一个版本,印象中是5.0以上的某个版本。garnet目前源码是1.0.4版本,此处我先拉取源码到本地:

3c9e488204444c0e2f995ed7ca8c0b83.png

设置GarnetServer为启动项,直接在Visual Studio里面启动

222af1dae81e7a12f90b2891f5e37166.png

Garnet兼容所有Redis的RESP协议和操作方式,那么使用一些redis客户端应该也是可以连接得上的。例如我使用一个老古董工具,redis desktop manager的试用版来试一下:

502ac7e5f2b3264638dee83150cceedb.png

因为我没有配置用户等信息,所以可以直接连接上garnet服务。因此也可以证明,garnet的连接是和redis兼容的。

也可以确认,当你写代码来操作garnet,也可以利用已有的任意支持redis驱动或者包来直接操作,而不需要更换或重写,相当于可以无损切换。

以下做个简单测试,利用redis自带的工具 redis-benchmark.exe 来进行测试garnet和redis的性能,做一个简单对比。以下测试仅是本地单机环境下的测试结果。

6d9d0fec740b775464ba90a40680f133.png

同时打开两个命令提示符窗口,左边测试本地redis,右边测试本地garnet。理论上使用redis自己的压力测试工具,可能对garnet不是很公平,但是应该不慌。如果性能接近,那基本上可以确定garnet可以替代redis了。

092602d09cbacff9a845a090dde662a5.png

先看第一个测试结果,服务器成功处理了100,000个 PING 请求,redis全部处理消耗1.92秒,garnet消耗2.17秒,redis胜一筹。redis 胜 garnet

1a3dc8715c1ae751283dd7fdf2d732f8.png

第二个测试结果, PING_BULK 模式进行压力测试,完成了100,000个请求,redis耗时1.85秒,garnet耗时1.82秒,几乎差不多。redis 败 garnet

04496d3af5f0ca19e88a6735886cd882.png

SET操作,Resis耗时1.97秒,garnet 耗时1.89秒,garnet略胜一筹。redis 败 garnet

07ef45b7e0ee32bb48d501a5ab09a7b9.png

GET操作,Redis耗时 1.9秒,garnet耗时 1.88秒,基本上接近。redis败garnet

d32d25b9f10432098ab1762bc236b493.png

Incr操作测试:redis败garnet

ec88f10edf263b3a82d0fb7c2f3b6e0b.png

LPUSH操作,redis 败 garnet

80ca640c088a4f5218e9d35d16ab773c.png

RPUSH操作,Redis 败 Garnet

1677688f8e4e719665895bbbcf487dd3.png

LPOP操作,Redis 败 Garnet

b665697a282313c5709024737251a2da.png

RPOP操作,Redis 胜 Garnet

b6b4a1949e0b3fd282e8830148eaddcf.png

SADD操作,Redis 败 Garnet

6676b684634ec63195789b347c61f495.png

HSET操作,Redis 败 Garnet

7d010896866710c079370323e8cfd535.png

SPOP 操作,平局

129d28660d4c54d98e71560e463ae7ea.png

LPUSH操作,redis 败 garnet

5c8d440d50d5b8e02b6d206e6cb3ed28.png

LRANGE_100,redis 胜 garnet

9241cfbfbb2da0d3e11f05663d61bf3f.png

LRANGE_300,redis 胜 garnet

db501f719f70cfe50163a3d80bbe190a.png

LRANGE_500,redis 胜 garnet

23c941b33409727c0f605cb80dc11f1a.png

MSET操作,redis 异常,garnet 胜

df7cfd55b03e5d51f35268b591c44d6e.png

以上内容我做个汇总:

83e5eae7980c90b6e8b9fe757eac16e7.png

如果对garnet产品感兴趣,以及garnet的具体配置等,可以参考garnet的文档,以此来配置出一个更适合你的生产环境和更高性能的效果。garnet官方文档地址:
https://microsoft.github.io/garnet/docs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值