Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库

这篇具有很好参考价值的文章主要介绍了Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你是否正在使用 Redis 作为您的数据结构存储,享受它的高性能、高可用的特性?如果是这样,那么你可能会对 KeyDB 感兴趣。

什么是 KeyDB?

KeyDB 一个由 Snap 提供支持、专为扩展而构建的开源数据库。它是 Redis 的高性能分支,专注于多线程、内存效率和高吞吐量。KeyDB 采用 MVCC 体系结构,允许您执行 KEYS 和 SCAN 等查询,而不会阻塞数据库并降低性能。KeyDB 保持与 Redis 协议、模块和脚本的完全兼容性,这包括脚本和事务的原子性保证。由于 KeyDB 与 Redis 开发保持同步,KeyDB 是 Redis 功能的超集,这使得 KeyDB 成为现有 Redis 理想的替代品。

项目地址:https://docs.keydb.dev/
源码地址:https://github.com/Snapchat/KeyDB

KeyDB 独有特性

除了与 Redis 相同的功能外,KeyDB 还提供了一些独有的特性,例如:

  • 无阻塞架构:采用一种 MVCC 体系结构,允许你可以查询数据库的单个快照,从而避免阻塞 SCAN 和 KEYS 等调用。这样可以大规模并发调用此类查询,而不会降低现有工作负载的整体性能。
  • 跨区域主动复制:这是一种新的复制模式,允许你在多个主节点之间进行双向异步复制。这样可以实现跨区域的多主站支持,提高数据可用性和一致性,无需哨兵监视节点进行故障转移。
  • 子项过期:这是一种新的过期机制,允许你对集合中的成员设置过期时间。这样可以实现更细粒度的数据管理和清理。
  • TLS加密:这是一种新的安全机制,为你的数据提供 TLS(传输层安全)支持。KeyDB 的 TLS 性能是 Redis + TLS 的 7 倍,并且不需要任何额外的配置或证书。
  • JavaScript 模块:这是一种新的扩展机制,让你可以使用 JavaScript 来编写自定义的命令和逻辑。JavaScript 模块基于 V8 引擎构建,比 Lua 更快,并且支持许多 Node.js 模块。

KeyDB 性能测试

在同一硬件上,KeyDB 可以实现比 Redis 高得多的吞吐量。主动复制简化了热备盘故障切换,使你能够轻松地跨副本分布写入操作,并使用简单的基于 TCP 的负载平衡/故障转移。KeyDB 的更高性能允许你在更少的硬件上做更多的事情,从而降低运营成本和复杂性。

下图为Redis、TLS 和多线程 KeyDB 基准测试比较:

Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库

测试显示,在 Redis 6(单线程)上启用 TLS 的情况下,测量值下降了 36%。但是,如果你以前使用过 I/O 线程功能,则可能会看到性能下降 61%,因为使用 TLS 不支持 I/O 线程。

下图为Redis、TLS 和多线程 KeyDB 延迟基准测试比较(数值越低越好):

Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库

可以看到,使用 TLS 时,这些负载下的延迟明显更高。KeyDB 不仅在非常高的容量下提供服务,而且延迟也比使用 TLS 的 Redis 低 7 倍。

下图为使用 YCSB 对 Redis 6 多线程 I/O 与 Elasticache 和 KeyDB 进行吞吐量测试比较:

Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库

很明显,KeyDB 在每个测试的工作负载下都实现了最高的吞吐量。Elasticache 排在第二位,其次是 Redis 6。可以注意到,在没有 I/O 线程的情况下,Redis 6 仍然比版本5快。

下图为使用 YCSB 对 Redis 6 多线程 I/O 与 Elasticache 和 KeyDB 进行延迟测试比较(以微秒为单位,值越低越好):

Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库

上面显示的趋势表明,当实例接近其容量吞吐量时,延迟会显著增加。KeyDB 可以处理比 Redis 6 高得多的吞吐量,并且略高于 Elasticache,因此能够在更高的负载下保持较低的延迟。

KeyDB、Elasticache 和 Redis 6 在轻度到中等流量下都有类似的延迟。直到容量开始达到更高的负载,才能看到差异。

更多测试内容请移步这里查看:https://docs.keydb.dev/blog

如何使用 KeyDB?

由于 KeyDB 与 Redis完全兼容,使得它非常容易使用,我们可以像 Redis 一样来使用它。来做一个简单的示例,演示如何连接到 KeyDB,设置和获取一个字符串值,以及使用 EXPIREMEMBER 命令来设置子项过期。

KeyDB命令文档:https://docs.keydb.dev/docs/commands/#expiremember

首先,从 Docker Hub 拉取 KeyDB 的镜像并运行:

# 拉取 KeyDB 的镜像
docker pull eqalpha/keydb

# 运行 KeyDB 的容器
docker run -p 6379:6379 -d eqalpha/keydb

然后,创建一个控制台应用程序,安装 StackExchange.Redis 库:

# 创建一个控制台应用程序
dotnet new console -o KeyDBDemo

# 安装 StackExchange.Redis 库
nuget install StackExchange.Redis

然后,编辑 Program.cs 文件,添加以下代码:

using StackExchange.Redis;
public class KeyDBDemo
{
    private static void Main(string[] args)
    {
        // 创建一个连接到本地Redis实例的连接器
        ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
        // 获取一个数据库对象
        IDatabase db = redis.GetDatabase();

        // 设置一个字符串值,键为 "name",值为 "Bing"
        db.StringSet("name", "Bing");

        // 获取键为 "name" 的字符串值
        var name = db.StringGet("name");

        // 打印结果
        Console.WriteLine($"The name is {name}");

        // 设置一个集合值,键为 "fruits",值为 ["apple", "banana", "orange"]
        db.SetAdd("fruits", new RedisValue[] { "apple", "banana", "orange" });

        // 为集合中的成员 "apple" 设置过期时间为 5 秒
        db.Execute("EXPIREMEMBER", "fruits", "apple", 5);

        // 获取键为 "fruits" 的集合值
        var fruits = db.SetMembers("fruits");

        // 打印结果
        Console.WriteLine($"The fruits are {string.Join(", ", fruits)}");

        // 等待 5 秒后,再次获取键为 "fruits" 的集合值
        Thread.Sleep(5100);
        fruits = db.SetMembers("fruits");

        // 打印结果
        Console.WriteLine($"The fruits are {string.Join(", ", fruits)}");

        // 关闭连接
        redis.Close();
    }
}

最后,运行程序,可以得到以下结果:

The name is Bing
The fruits are banana, apple, orange
The fruits are banana, orange

 写作不易,转载请注明文章出处,否则禁转!!!文章来源地址https://www.toymoban.com/news/detail-710907.html

👇感谢阅读,点赞+分享+收藏+关注👇
Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库
文章出自猿惑豁微信公众号

到了这里,关于Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DDD架构为什么应该首选六边形架构?

    分层架构的一个重要原则是:每层只能与位于其下方的层发生耦合。 分层架构分两种:一种是严格分层架构,规定某层只能与直接位于其下方的层发生耦合;另一种是松散分层架构,允许任意上方层与任意下方层发生耦合。 下图是一个典型的DDD传统分层架构。 以上分层架构

    2024年02月16日
    浏览(56)
  • 数据库——Redis 没有使用多线程?为什么不使用多线程?

    虽然说 Redis 是单线程模型,但是, 实际上, Redis 在 4.0 之后的版本中就已经加入了对多线程的支持。 不过,Redis 4.0 增加的多线程主要是针对一些大键值对的删除操作的命令,使用这些命令就会使用主处理之外的其他线程来“异步处理”。 大体上来说, Redis 6.0 之前主要还是

    2024年02月11日
    浏览(64)
  • Redis——关于它为什么快?使用场景?以及使用方式?为何引入多线程?

    目录 1.既然redis那么快,为什么不用它做主数据库,只用它做缓存? 2.Redis 一般在什么场合下使用?  3.redis为什么这么快? 4.Redis为什么要引入了多线程? redis设计者的初衷,就只是为了存储 小量级的共享数据 。 所以,他敢直接单线程直接干上去,因为数据量小,所以够快

    2024年01月25日
    浏览(53)
  • 阿里三面过了,却无理由挂了,HR反问一句话:为什么不考虑阿里?

    进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位测试员发帖称,自己去阿里面试,三面都过了,却被无理由挂了,阿里某部门HR还问他为何不考虑阿里。当时这位程序

    2024年02月06日
    浏览(57)
  • ElasticSearch(七):ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月08日
    浏览(81)
  • Windows 程序开机自启动速度优化,为什么腾讯会议自启动速度那么高?

    目录 一、问题的说明和定义 二、问题的分析 1.问题初步分析 2.详细的分析: 2.1Windows常见的自启动方式 2.2Windows常见的自启动方式的细节分析 三、问题的解决方案 1、为什么腾讯会议Rooms那么快 2.我们是否可以跟腾讯会议一样快 这两天有个优化项需要做个技术调研,就是我们

    2024年02月02日
    浏览(89)
  • ElasticSearch第七讲:ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月19日
    浏览(52)
  • 为什么有时候ADSL访问速度会很慢

      为什么有时候ADSL访问速度会很慢        1.网卡绑定的协议太多。上网速度慢,在局域网用户中很常见,原因是网卡绑定的协议太多。网卡上如果绑定了许多协议,当数据通过网卡时,计算机就要花费很多时间来确定这个数据使用哪种协议来传送,这时用户就会感觉上网慢

    2024年02月08日
    浏览(56)
  • ElasticSearch第七讲 ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月25日
    浏览(57)
  • 【Redis】-使用Lua脚本解决多线程下的超卖问题以及为什么?

    一.多线程下引起的超卖问题呈现 1.1.我先初始化库存数量为1、订单数量为0 1.2.然后我开启3个线程去执行业务 业务为:判断如果说库存数量大于0,则库存减1,订单数量加1 结果为:库存为-2,订单数量为3 原因:如下图所示,这是因为分别有6个指令(3个库存减1指令,3个订单

    2024年02月03日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包