DiceDB 2024-10-03 版本更新解析:新命令、Eval 重构与多协议支持

发布时间:2026/11/14 10:21:27

DiceDB 2024-10-03 版本更新解析:新命令、Eval 重构与多协议支持 DiceDB 2024-10-03 版本更新解析新命令、Eval 重构与多协议支持【免费下载链接】dicedbOpen-source, low-latency key/value engine built on Valkey with query subscriptions and hierarchical storage tiers.项目地址: https://gitcode.com/GitHub_Trending/dic/dicedb本篇技术指南围绕 DiceDB 2024-10-03 的版本更新记录展开系统性梳理该版本新增的 11 个命令、5 项核心改进、3 个 Bug 修复以及测试与文档建设成果并结合仓库源码逐一验证其实现细节。读完本文你将掌握 DUMP/JSON.RESP/ZADD 等新命令的语法与底层序列化机制、Eval 多协议重构的架构脉络以及该版本在哈希、有序集合、JSON 等数据类型上的完整能力边界。版本概览2024-10-03 是 DiceDB 社区贡献非常密集的一个版本。从更新记录看该版本的核心脉络可以概括为三条主线命令面扩充一口气新增了 11 个命令覆盖字符串APPEND、哈希HKEYS、HEXISTS、HINCRBY、HINCRBYFLOAT、HVALS、HRANDFIELD、有序集合ZADD、ZRANGE、JSONJSON.RESP、JSON.ARRTRIM以及序列化DUMP等多个数据类型引擎层重构完成 Table 抽象、Eval 重构与多架构构建支持为后续多协议、多线程能力打下基础质量与协议建设新增 HTTP/WebSocket 集成测试、文档一致性改进并修复了 BITPOS、TYPE、BGREWRITEAOF 等已知问题。值得说明的是更新记录末尾还附带了项目负责人 Arpit 关于 Playground、配置命名、错误规范、日志库统一等内部讨论点这些讨论直接影响了后续版本中REQUEST_LIMIT、REQUEST_WINDOW、/shell/exec、slog等命名与架构决策是理解 DiceDB 演进方向的重要线索。新增命令详解以下所有命令均已在仓库 internal/eval/commands.go 的DiceCmds注册表中完成注册并在 internal/eval/store_eval.go 中有对应的 eval 实现。字符串命令APPEND贡献者Aditya-BhaleraoAPPEND用于在 key 的现有字符串值末尾追加内容。如果 key 不存在则等效于先创建该 key 再设置值如果 key 已存在但值不是字符串类型则返回类型错误。其核心逻辑在evalAPPEND中实现返回值是追加操作完成后字符串的新长度。哈希命令该版本一次性补齐了哈希数据类型的常用操作实现均位于internal/eval/store_eval.go类型校验统一依赖 internal/object/object.go 中的对象类型断言HKEYSswarajrb7返回哈希中所有字段field的名称列表对应evalHKEYSHEXISTSc-harish检查哈希中指定字段是否存在返回 1 或 0对应evalHEXISTSHINCRBYankkyprasad对哈希中指定字段的整数值进行增量运算支持负数递减字段不存在时按 0 起算对应evalHINCRBYHINCRBYFLOATayushsatyam146对哈希字段执行浮点增量运算比 HINCRBY 精度更宽对应evalHINCRBYFLOATHVALSbijuli74返回哈希中所有字段的值列表对应evalHVALSHRANDFIELDIndranil0603随机返回哈希中的一个或多个字段对应evalHRANDFIELD。从源码结构看这些哈希命令与现有 HLEN、HSET、HGET 等命令共同构成了 DiceDB 对哈希类型的完整支持面测试用例覆盖可参见 internal/eval/hmap_test.go。有序集合命令ZADD与ZRANGEJyotinder SinghZADD 用于向有序集合添加一个或多个成员及其分数ZRANGE 则按分数区间或排名区间返回成员。二者的底层数据结构是 internal/eval/sortedset/sorted_set.go 中的跳表实现支持WITHSCORES等常见参数。该版本同时期在_skipped_commands目录中保留了对应的文档模板见 docs/src/_skipped_commands/ZADD.md、docs/src/_skipped_commands/ZRANGE.md可作为语法参考。JSON 命令JSON.RESPprateek.singh.rathore以 Redis RESP 协议格式返回 JSON 值将 JSON 树扁平化为 RESP 数组结构对应evalJSONRESPJSON.ARRTRIMjujiale裁剪 JSON 数组中指定索引区间之外的元素区间边界与索引语义与 RedisJSON 保持一致对应evalJSONARRTRIM。这两个命令与仓库中已有的 JSON.SET、JSON.GET、JSON.ARRAPPEND 等共同组成 JSON 模块相关实现集中在internal/eval/store_eval.go的 JSON 操作区段。序列化命令DUMPTheRanomialDUMP 将 key 当前存储的值序列化为二进制格式并返回Base64 编码与 RESTORE 命令成对使用用于跨实例迁移数据。其实现位于 internal/eval/dump_restore.gordbSerialize负责序列化以0x09作为头部标识随后写入对象类型字节再按类型写入具体值最后以0xFF作为结束标记序列化内容附加 CRC64ECMA 表校验和appendChecksum保证传输过程中的数据完整性rdbDeserialize支持反序列化包括字符串、整数、集合、JSON、字节数组、Deque、布隆过滤器、有序集合、Count-Min Sketch 在内的全部对象类型。evalDUMP的入口实现位于 internal/eval/store_eval.go当 key 不存在时返回 NIL序列化失败时返回错误。该命令是 DiceDB 内置对象编码体系见 internal/object/typeencoding.go在数据迁移场景下的直接应用。核心改进与重构Table 抽象与双 Map 支持Arpit Bhayani该版本将底层存储的 Map 实现抽象为统一的ITable接口定义在 internal/common/map.gotype ITable[K comparable, V any] interface { Put(key K, value V) Get(key K) (K, V) // 实际签名以源码为准 Delete(key K) Len() int All(func(k K, obj V) bool) }接口之上提供了两种实现RegMap基于sync.Map的并发安全实现带原子计数器见 internal/common/regmap.go与普通 Go map 实现。这种设计让 Store 可以在不同场景下按需切换底层数据结构internal/store/store.go 中Store结构体的store与expires字段即声明为common.ITable类型。Eval 重构多协议与多线程兼容Ashwin Kulkarni更新记录提到的 Eval Refactor 在源码中的落点集中在 internal/eval/execute.go新引入的Eval结构体携带isHTTPOperation、isWebSocketOperation、isPreprocessOperation三个标志位使同一个命令执行管线可以感知当前请求来自 RESP、HTTP 还是 WebSocket 协议同时DiceCmds注册表中为每个命令增加了IsMigrated标记与NewEval/StoreObjectEval两个入口采用旧实现兜底、新实现渐进迁移的策略if diceCmd.IsMigrated { if e.cmd.InternalObjs ! nil { return diceCmd.StoreObjectEval(e.cmd, e.store) } return diceCmd.NewEval(e.cmd.Args, e.store) } return EvalResponse{Result: diceCmd.Eval(e.cmd.Args, e.store), Error: nil}其中StoreObjectEval专门服务于需要跨分片传递对象的命令如 COPY、RENAME、PFMERGE这也与仓库中 internal/shard 与 internal/shardmanager 的分片架构形成呼应。跨架构构建支持swaingotnochill该版本使 DiceDB 能够在不同 CPU 架构上编译运行。从源码看这一目标通过平台相关文件的划分实现如 internal/iomultiplexer/epoll_linux.go 对应 Linux/epollinternal/iomultiplexer/kqueue_darwin.go 对应 macOS/kqueue配置文件层面也有 config/constants_linux.go 与 config/constants_darwin.go 的区分。WebSocket 支持prateek.singh.rathore该版本为 DiceDB 增加了 WebSocket 协议支持。从 internal/eval/eval.go 与 internal/eval/execute.go 中的isWebSocketOperation标志可以看出命令执行层已经为 WebSocket 请求预留了完整的状态通道同时该版本的集成测试也包含了对 SET/GET 的 WebSocket 用例协议能力介绍可参考 docs/src/content/docs/protocols/websockets.mdx。代码结构改进Jyotinder Singh更新记录提到优化了evalHVALS的代码结构使其与其他哈希命令的实现风格保持一致属于渐进式重构的一部分。Bug 修复BITPOSBhavya Jain修复了位查找命令在特定边界条件下的计算结果错误问题。BITPOS 的注册表项位于 internal/eval/commands.go位运算逻辑实现在 internal/eval/bitpos.goTYPE 命令返回编码apoorvyadav1111修复了 TYPE 命令返回值编码不一致的问题使其在不同协议下返回统一的类型字符串string、hash、sortedset、json 等BGREWRITEAOF 子进程KaviiSuri修复了 macOS 上BGREWRITEAOF后台重写 AOF 时子进程无法正常工作的问题。AOF 相关逻辑位于 internal/store/aof.go。测试与文档建设该版本在质量保障方面投入明显HTTP 集成测试新增 KEYS、MGET、MSET、JSON 等命令的 HTTP 协议集成测试Shubh1815以及由 Karan Dixit、HARSH VARDHAN SINGH、apoorvyadav1111 补充的其他命令 HTTP 测试。测试骨架可参考 tests/commands/ironhawk/setup.go它通过dicedb-go客户端连接本地实例完成端到端验证WebSocket 集成测试为 SET、GET 命令新增 WebSocket 场景测试文档改进多个贡献者对命令文档进行了更新与一致性修正。仓库中的命令文档位于 docs/src/content/docs/commands如 ZADD、ZRANGE、HGETALL 等并配有生成文档的脚本见 scripts/generate-docs与文档测试scripts/test-docs从工具链层面保证文档与命令实现不脱节。基础设施与配置变更keystat 本地化soumya-codes将 key 计数统计收敛到 Store 实例内部。当前实现中Store通过GetKeyCount/IncrementKeyCount维护本地计数见 internal/store/store.go避免了跨分片共享计数带来的同步开销最大 TCP 连接数控制Ayush Saluja新增对最大客户端连接数的校验。配置项MaxClients位于 config/config.go默认值 20000由 iomultiplexer 层在初始化时校验非法值返回ErrInvalidMaxClients并在 internal/server/ironhawk/iothread_manager.go 中通过ErrMaxClientsReached拒绝超额连接README 与版本更新Arpit Bhayani、Dhroov GuptaREADME 多轮改进并完成版本号打补丁。内部讨论与后续演进方向更新记录末尾的 Discussion 部分记录了项目负责人 Arpit 提出的架构与工程化议题这些讨论虽然没有在本版本落地但揭示了 DiceDB 的治理思路主要包括命名规范化统一使用 DiceDB 而非 Dice配置项REQUEST_LIMIT建议改为REQUEST_LIMIT_PER_MIN、REQUEST_WINDOW建议改为REQUEST_WINDOW_SEC端点从/cli改为/shell/execblacklist 统一为 blocklist错误与日志规范所有错误信息统一小写errorResponse应直接做 JSON 序列化而非字符串拼接统一使用slog替代混用的log与slogPlayground 架构用.env文件承载PLAYGROUND_MONO_URL替代命名不佳的CLI_COMMAND_URLPlayground Web 应以静态站点形式发布而非依赖服务器进程并删除无意义的Dockerfile_Backend文件SDK 与命令分发质疑db包作为 DiceDB 命令薄包装层的价值提出由 SDK 暴露通用command执行接口使前后端新增命令时只需改动单侧代码。这些讨论点在后来的版本中逐步落实也解释了当前仓库中 cmd 目录、MaxClients配置项与slog日志体系internal/logger等现状的由来。如何验证本版本能力若要亲手验证上述命令可先构建并启动 DiceDBgo run main.go随后通过 RESP 客户端或dicedb-goSDK 依次尝试# 字符串与哈希 APPEND mykey hello HKEYS myhash HEXISTS myhash field1 HINCRBY myhash counter 5 HINCRBYFLOAT myhash ratio 1.5 HVALS myhash HRANDFIELD myhash # 有序集合 ZADD leaderboard 100 alice 200 bob ZRANGE leaderboard 0 -1 WITHSCORES # JSON JSON.SET doc $ {a: [1, 2, 3, 4]} JSON.ARRTRIM doc $ 1 2 JSON.RESP doc # 序列化 DUMP mykey对应命令的集成测试可参考 tests/commands/ironhawk 下的各测试文件如zadd_test.go、set_test.go它们是理解命令行为边界的权威参考。小结2024-10-03 版本是 DiceDB 在命令覆盖度与引擎架构上双线并进的一个缩影一方面通过社区贡献快速补齐字符串、哈希、有序集合、JSON 的核心命令另一方面通过 Table 抽象、Eval 重构、WebSocket 支持为多协议、多线程和分片架构铺路。对于想要理解 DiceDB 演进脉络或在其上做二次开发的工程师这份更新记录结合上述源码路径是性价比很高的入门材料。【免费下载链接】dicedbOpen-source, low-latency key/value engine built on Valkey with query subscriptions and hierarchical storage tiers.项目地址: https://gitcode.com/GitHub_Trending/dic/dicedb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/14 10:21:26

SpringBoot+Vue构建医学电子技术课堂系统实践

1. 项目概述:医学电子技术课堂系统的技术架构与核心价值这个基于SpringBootVue的医学电子技术课堂管理系统,本质上是一个面向医学院校和医疗培训机构设计的数字化教学平台。作为一名在医疗信息化领域摸爬滚打多年的开发者,我亲历过传统医学教…

2026/11/13 5:50:58

Turborepo 增量构建:缓存命中率调优实战

Turborepo 增量构建:缓存命中率调优实战在前端大型 Monorepo(单仓多包架构)的日常开发与 CI/CD 构建中,工程规模扩大带来的最大阵痛就是——“全仓构建(Full Build)耗时爆炸”。 当仓库包含 10 个子应用&am…

2026/11/13 9:16:16

考研复试第六天高效备考策略与实战技巧

1. 复试准备的关键阶段解析第六天的复试准备往往处于整个备考周期的关键转折点。根据我多年辅导考生的经验,这个阶段通常会出现三种典型状态:一是已经完成基础知识梳理,开始进入专题强化;二是处于第一轮复习收尾阶段,正…

2026/11/14 10:18:09

劳动局可考电工证吗多少钱能过实操考试

劳动局可考电工证吗多少钱能过实操考试 实操考试心里没底怕挂科,这几乎是每个想报考电工证的小伙伴的真实写照。尤其是在周口这样的地方,很多人都会纠结: 劳动局可考电工证吗…

2026/11/14 10:18:09

电工作业 哪些证网上查询怎么操作最靠谱

电工作业 哪些证网上查询怎么操作最靠谱 证书过期了不知道怎么复审延期,网上查询成了很多人的刚需。特别是在河南焦作,很多工程类应届生拿到电工证后,要么不知道怎么查证,要么误操作导致证书失效。这篇文章就来聊聊 电工作业 哪些证 ,以及如何通过…

2026/11/14 10:18:08

罗田哪里可以考电工证官方回应来了,别再被中介坑

罗田哪里可以考电工证官方回应来了,别再被中介坑 不知道去哪报名怕被中介坑?别急,官方回应来了,罗田哪里可以考电工证,其实比你想的简单多了。现在很多人都在问,罗田本地有没有正规的电工证报考渠道?怕被那些“代办机构”骗钱,还拿不到证。今天就从信…

2026/11/14 10:18:08

进入工地要有电工证吗良心建议:别再被工地太忙耽误考证

进入工地要有电工证吗良心建议:别再被工地太忙耽误考证 工地太忙根本没时间复习考试,这话我听太多了。说实话,现在工地干活的兄弟,谁不被甲方催、被工头压、被工期赶?但偏偏,很多岗位 进入工地要有电工证吗…

2026/11/14 10:18:08

莲塘电工证在哪考取?2026河南最新政策下,学历不高也能报!

莲塘电工证在哪考取?2026河南最新政策下,学历不高也能报! 你是不是也在想, 学历不高怕报不上名 ?特别是像我这样在南阳卧龙区干建筑的工人,想要考个电工证,总觉得自己文化水平不够,怕被拒之门外。但其实, 2026河南最新政策…

2026/11/14 10:13:08

低压电工作业问答库在哪考?证书过期了不知道怎么复审延期

低压电工作业问答库在哪考?证书过期了不知道怎么复审延期 证书过期了不知道怎么复审延期?别慌,很多人在低压电工作业考试和复审过程中都遇到过类似的问题。尤其是从事驻马店公路工程相关工作的朋友,低压电工证是必须持有的特种作业证,一旦过期,不仅影响…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/14 0:06:39

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来 之前考的证在外省能不能转过来?这个问题我太熟悉了,作为一名干了十几年的特种作业证书办理从业者,每年都会遇到不少像你一样在外地考了证,回来却发现无法直接使用的学员。别急,今天我就…

2026/11/14 0:06:39

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你不是一个人。在信阳浉河区,很多刚进入工地的电工都面临这样的困境:工作强度大,时间碎片化,根本没有系统复习考试的机会。但电工证是上岗的硬门槛,…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑