核心数据性能

缓存

把最热的数据放在内存中,读取响应远低于一毫秒,引擎让每个核心都投入工作。

GET/s(流水线,实测)
36.6M
TTL 精度
ns
现有客户端直接可用
RESP2/3
步骤 1 / 5
通过缓存读取

命中直接从内存返回。完全不访问数据库。

示例会话playing
# 通过缓存读取
hotkv> GET product:1001
"{\"name\":\"Desk lamp\",\"price\":39}"

使用真实 HotKV 命令和示例回复的动画演示。点击任意步骤即可跳转。 命令和回复保持英文,与您在 HotKV 中输入和看到的完全一致。

问题所在

对于每秒被读取成千上万次的数据,访问数据库既慢又贵。每一次页面浏览、API 调用或仪表盘刷新都在重复同样的查询,数据库远在您的应用之前就成了瓶颈。

HotKV 如何解决

HotKV 位于数据库前面,把结果保存在内存中。您的应用先从 HotKV 读取,只有未命中时才回退到数据库。由于 HotKV 同时在多个线程上执行命令,繁忙的缓存不会把所有客户端都挤到一个核心上,而标签让您在底层数据变化时一次性让整组条目失效。

逐步演示

逐条命令,看看发生了什么

  1. 01

    通过缓存读取

    命中直接从内存返回。完全不访问数据库。

    GET product:1001
  2. 02

    未命中,加载一次并缓存

    未命中时,应用读取一次数据库,并将结果缓存五分钟。

    SET product:2002 "{\"name\":\"Oak desk\",\"price\":420}" EX 300
  3. 03

    按依赖关系为条目打标签

    每个展示灯具商品的缓存页面都带有同一个标签。

    TAG.SET product:1001 catalog:lighting
  4. 04

    让整组失效

    价格变了。列出带有该标签的所有键,并在一个流水线中把它们删除。

    TAG.MEMBERS catalog:lighting
  5. 05

    寿命极短的条目

    一个已经设置好的闪存令牌,必须在 250 ms 后消失,精度达到纳秒。

    NEXPIRE flash:token:9 250000000
适用场景

真实场景

网上商店

商品页面、价格和库存每秒被读取成千上万次,商品目录变化时按标签刷新。

API 与移动后端

热门端点的响应以较短的 TTL 缓存,流量高峰打到内存而不是数据库。

内容网站

渲染好的片段和文章元数据缓存几分钟,编辑发布时按标签失效。

内置功能

您将获得

从秒到纳秒的 TTL

EXPIRE 和 PEXPIRE 的行为符合您的预期。NEXPIRE 增加了纳秒精度。

EXPIREPEXPIRENEXPIRE

按标签失效

用 TAG.SET 为键打上标签,然后找出带有某个标签的所有键。

TAG.SETTAG.MEMBERS

可选压缩

可以压缩大型负载,让更多工作集装进内存。

多线程读取

命令在并行线程上执行,吞吐量随核心数增长。具体数据见性能页面。

GETMGET

常见问题

我可以使用现有的 Redis 客户端吗?

HotKV 支持 Redis 协议(RESP2 和 RESP3),因此标准的 Redis 客户端都能连接。请在命令参考中确认您依赖的命令。

如何让一组缓存键失效?

在缓存时用 TAG.SET 为键打标签,然后调用 TAG.MEMBERS,并删除返回的键。

36.6M 这个数字从何而来?

这是 HotKV 公开基准测试中流水线 GET 的吞吐量。测试方法和硬件见性能页面。

相关用例

在您自己的工作负载上试试

HotKV 兼容 Redis 协议,您可以把现有客户端指向它,运行这些相同的命令。