跳转到主要内容

KeyDB v6.3.0 发布 - 功能摘要

KeyDB 6.3.0 版是首个包含先前 KeyDB 企业版功能的开源版本!此版本是多年来致力于摆脱 KeyDB 全局锁并实现跨核心更好扩展的成果。

主动复制 PSYNC#

主动复制一直是许多 KeyDB 版本的功能,但在连接到新的对等节点时总是需要进行完全同步。在此版本中,KeyDB 现在支持部分同步,以实现快速的集群修复。此外,KeyDB 能够根据对等节点的知识更新其复制偏移量,这意味着从一个节点进行完全同步就足以允许与网格内的其他节点进行部分同步。

这一变化大大减少了向主动复制集群添加新节点所需的时间。在我们的测试中,一个12节点的网格集群的添加时间从超过10分钟减少到了一分半钟。

异步命令#

异步命令是可以在没有全局锁的情况下执行的命令。此功能必须首先在您的配置文件中通过设置“enable-async-commands yes”来启用。启用异步命令时,一致性会略有修改,特别是来自其他客户端的写入可能需要经过配置的时间才能对其他客户端可见。此时间通过 max-snapshot-slip 配置参数进行配置。

异步命令的排序规则如下: 写入在客户端之间始终是完全有序的 写入对于执行写入的客户端始终是立即可见的

对于大多数应用程序来说,对主动复制一致性模型的轻微修改将是不可见的。如果您的应用程序依赖于不同客户端之间的排序,则此功能默认是禁用的。此外,我们提供了一个名为“lfence”的新命令,供那些依赖于跨客户端一致性但愿意在适当的时候插入栅栏以确保完全排序的客户端使用。

以下命令支持异步操作:GET, MGET。

随着时间的推移,将添加更多的只读命令。如果您对某个特定命令特别感兴趣,请提交一个 issue 来帮助我们优先考虑您的用例。

异步 Rehash#

KeyDB 依赖自旋锁来同步线程。在 KeyDB 的早期版本中,等待锁被获取时消耗的 CPU 时间被浪费了。KeyDB 现在有能力在这段时间内执行 rehash,将原本浪费的 CPU 时间用于更有用的目的。在许多情况下,这几乎可以完全隐藏 rehash 的开销。启用此功能无需任何配置,它默认运行。

进程内后台保存#

历史上,Redis 使用“fork”系统调用来创建一个新进程来执行后台保存。这使得代码更容易理解,因为内核处理了后台保存期间内存写时复制(copy-on-write)的艰巨任务。然而,这种方法的缺点是无法准确估算包括后台保存在内的总内存需求。

KeyDB 现在使用一个新的“快照”系统,在特定时期创建数据库快照,并在进程内对新更改进行写时复制。因此,maxmemory 设置现在是一个全局设置,并将包括用于后台保存的内存。

为了向后兼容,在后台保存期间,maxmemory 的语义略有修改。当后台保存在进行中时,KeyDB 将允许内存消耗超过 maxmemory 最多 20%。这是为了模拟旧的行为,即后台保存的内存消耗不计入 maxmemory 设置,同时又能轻松计算出内存使用的总上限。

IStorage 接口#

此版本尚未包含基于 RocksDB 的 KeyDB FLASH 功能。然而,该版本确实包含了 KeyDB 的 IStorage 接口,这是我们持久化存储功能的支柱。通过为您的自定义存储解决方案实现此接口,您将能够启用所有 KeyDB 功能。