跳转到主要内容

KeyDB 发布 5.1 版本——快来看看有哪些新功能!

我们很高兴地宣布 5.1 版本,它为 RELEASE_5 分支带来了新的稳定功能。如果您还没有跟上 KeyDB 的最新动态,这里有一些您可以期待看到的新内容!

  • 您现在可以使用 EXPIREMEMBER 和 EXPIREMEMBERAT 为集合(set)中的单个成员设置过期时间
  • EXPIRE 命令已更新,能够近乎实时地主动删除过期的键。这对大量使用 EXPIRE 功能的用户来说是一项重大改进
  • EXPIRE 和 EXPIREMEMBER 现在比以前占用更少的内存
  • OBJECT 现在有了一个新的子命令 LASTMODIFIED,允许您查看键自上次修改以来的时间(不包括读取操作)
  • BITOP 现在提供 LSHIFT 和 RSHIFT 选项
  • TTL 和 PTTL 已被修改,以支持子键(subkey)过期功能
  • KeyDB 的基准测试显示,单节点性能是 Redis 的 5 倍

EXPIRE#

EXPIRE 命令的链接

KeyDB 现在使用一种确定性算法,以线性方式主动删除过期的键。这使得过期键的移除近乎实时。对于大量使用 EXPIRE 命令的用户来说,这可以显著节省内存使用。

以前使用的是一种随机算法,当过期键的数量开始增加时,主动移除过期标签的能力就会变差。以下面的例子为例,从一个包含 10,000 个带过期设置的键的数据库中移除 100 个过期键所需的时间。这个过程是非线性的,需要一段时间才能移除这些键。在过期键更多,且活跃过期键(TTL>0)与已过期键(TTL<=0)比例更高的数据集中,您可能会发现有些键等待数天才被删除。

image

在上述场景中,使用更新后的算法,KeyDB 的键在不到 1 秒的时间内就被移除了

另一个很棒的特性是,对 EXPIRE 功能的更新并不会增加 CPU 密集度,实际上比以前大约节省了 10% 的内存

请查看这篇文章,深入了解所做的更改:此处

EXPIREMEMBER#

EXPIREMEMBER 命令的链接

KeyDB 现在支持子键过期。这意味着您可以为集合中的单个成员设置过期时间。该命令是 EXPIREMEMBER,实际上比常规的 EXPIRE(在 EXPIRE 更新之前——与 Redis 相比)要少占用约 5% 的内存。

命令格式:EXPIREMEMBER key member delay [Unit: ms,s]

EXPIREMEMBERAT#

EXPIREMEMBERAT 命令的链接

这是一个新命令,与 EXPIREMEMBER 类似,但不是指定持续时间,而是指定子键过期的 Unix 时间戳。

命令格式:EXPIREMEMBERAT key member timestamp

TTL 和 PTTL#

链接到 TTLPTTL 命令

这些命令已更新以支持子键过期,因此您可以查询集合中成员上设置的过期剩余时间。

子键的命令格式:TTL key memberPTTL key member

OBJECT LASTMODIFIED#

OBJECT LASTMODIFIED 命令的链接

OBJECT 现在有了一个新的子命令 LASTMODIFIED,它返回自键上次被修改以来经过的时间(以秒为单位)。这与 IDLETIME 不同,因为它不受键的读取操作影响。

命令格式:OBJECT LASTMODIFIED key

BITOP LSHIFT 和 RSHIFT#

链接到 BITOP LSHIFTBITOP RSHIFT 命令

这是 BITOP 的一个新功能,可以按指定数量进行按位左移或右移。这是小端格式,并为处理位串等提供了新功能。

命令格式:BITOP LSHIFT key integerBITOP RSHIFT key integer

保持联系#

如果您希望看到某个功能被添加到 KeyDB 中,请在 Github 上创建一个 issue,我们会认真考虑!

要了解 KeyDB 的最新动态,请订阅我们的邮件列表。我们会尽量让邮件内容包含项目信息,并避免发送垃圾邮件。

如果您有有趣的用例或加载场景想要分享,请通过 support@eqalpha.com 联系我们。