当前位置: 首页 >  互联网技术 >  Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库

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

导读:你是否正在使用 Redis 作为您的数据结构存储,享受它的高性能、高可用的特性?如果是这样,那么你可能会对 KeyDB 感兴趣。.什么是 KeyDB?.KeyDB 一个由 Snap 提供支持、专为扩展而构建的开源数据库。它是 Redis 的高性能分支,专注于多线程、内存效率和高吞

你是否正在使用 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 基准测试比较:

![图表, 条形图

描述已自动生成](/img/m/1709665038643.jpg)

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

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

![图表, 条形图

描述已自动生成](/img/a/1709665038645.jpg)

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

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

![图表, 条形图

描述已自动生成](/img/v/1709665038645.jpg)

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

下图为使用 YCSB 对 Redis 6 多线程 I/O 与 Elasticache 和 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

写作不易,转载请注明文章出处,否则禁转!!!

👇感谢阅读,点赞+分享+收藏+关注👇

![图形用户界面, 文本, 应用程序, 聊天或短信

描述已自动生成](/img/o/1709665039563.jpg)

文章出自猿惑豁微信公众号

内容
  • Unity 中的存档系统(本地存档)
    Unity 中的存档系统(本地存
    2023-12-09
    思想.在游戏过程中,玩家的背包、登录、人物系统都与数据息息相关,无论是一开始就设定好的默认数据,还是可以动态存取的数据,
  • Unity性能优化(二) 性能分析篇
    Unity性能优化(二) 性能分
    2023-12-09
    性能优化的第一步是 收集数据,在 Unity 中我们有多种性能分析工具可供使用。下面简单介绍几个常用工具。.Unity
  • Mybatis的工作原理
    Mybatis的工作原理
    2023-12-05
    mybatis的工作原理.mybatis基本工作原理.封装sql ->调用JDBC操作数据库 -> 返回数据封装.JDB
  • 浏览器缓存原理
    浏览器缓存原理
    2023-12-03
    本文可以配合本人录制的视频一起食用.目的.通常说到浏览器缓存,大多是和性能优化有关,使用缓存,通常是两个主要目的,第一是
  • 数据分析师如何用SQL解决业务问题?
    数据分析师如何用SQL解决业务问
    2023-12-03
    本文来自问答。.提问:数据分析人员需要掌握sql到什么程度?.请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?
  • 缓存面试解析:穿透、击穿、雪崩,一致性、分布式锁、Redis过期,海量数据查找
    缓存面试解析:穿透、击穿、雪崩,
    2023-12-03
    为什么使用缓存.在程序内部使用缓存,比如使用map等数据结构作为内部缓存,可以快速获取对象。通过将经常使用的数据存储在缓
  • Unity学习笔记--数据持久化Json
    Unity学习笔记--数据持久化
    2023-12-02
    JSON相关.json是国际通用语言,可以跨平台(游戏,软件,网页,不同OS)使用,.json语法较为简单,使用更广泛。
  • ***性能优化和调整服务
    ***性能优化和调整服务
    2023-12-31
    ***性能优化和调整服务.***性能优化和调整服务是指针对服务器的硬件和软件进行调整和优化,以提高其运行效率和稳定性的服
  • 科技创新孵化器服务
    科技创新孵化器服务
    2023-12-16
    科技创新孵化器服务.科技创新孵化器是指为初创科技企业提供办公、技术、**和资金服务的机构,而科技创新孵化器服务则是指这些
  • ***迁移与升级解决方案
    ***迁移与升级解决方案
    2024-01-05
    ***迁移与升级解决方案.随着业务的不断扩大和发展,很多企业逐渐意识到原有的***已经不能满足日益增长的需求,因此需要进
  • 虚拟现实技术开发
    虚拟现实技术开发
    2024-01-15
    虚拟现实技术开发.虚拟现实技术已经成为了当今科技行业的热门话题,它的发展日益迅猛,给人们的生活和工作带来了巨大的变革。在
  • 全球电子元件市场趋势分析
    全球电子元件市场趋势分析
    2023-12-31
    全球电子元件市场趋势分析.近年来,全球电子元件市场呈现出不断增长的趋势。随着科技的不断发展和智能设备的普及,电子元件市场
  • 电子元件质量检测与认证服务
    电子元件质量检测与认证服务
    2024-01-05
    电子元件质量检测与认证服务.为什么需要电子元件质量检测与认证服务?.随着电子产业的不断发展,电子元件在各个生产领域都起着
  • ***虚拟化技术咨询服务
    ***虚拟化技术咨询服务
    2023-12-21
    ***虚拟化技术咨询服务.在当今数字化时代,***虚拟化技术越来越受到企业和个人用户的青睐。虚拟化技术通过将物理***划
  • 高性能电子元件**
    高性能电子元件**
    2024-01-10
    高性能电子元件**.随着科技的不断进步,电子行业的发展日新月异。高性能电子元件作为电子产品的关键组成部分,对于产品的性能
  • 定制化电子元件解决方案
    定制化电子元件解决方案
    2024-01-15
    定制化电子元件解决方案.在现代科技发展迅速的时代,电子元件的需求日益增加,同时对于定制化的需求也在不断提升。定制化电子元
  • ***安全加固与防护方案
    ***安全加固与防护方案
    2024-01-10
    ***安全加固与防护方案.随着互联网的快速发展,***安全问题日益凸显。一旦***遭受攻击,可能导致数据泄露、服务中断甚