Redis 4.0将引入Streams数据结构,这是一种通用日志式数据结构,支持带字段的条目、范围查询、阻塞读取和消费者组功能,填补了Redis在消息序列和时间序列应用中的空白。
#redis
29 条相关内容
本文详细分析了Redis 4.0中PSYNC2复制协议的一个严重bug:从节点重启后无法正确处理主节点复制积压缓冲区中的Lua脚本命令,导致数据不一致。作者反思了过早发布稳定版本、匆忙修复以及测试覆盖不足等问题,并提出了改进措施。
Redis 作者 antirez 宣布 Streams 功能已成为当前主要开发重点,消费者组规范已确定并正在实现中。预计两个月内 Redis 5.0 将正式发布,届时将包含生产就绪的 Streams 功能及完整的消费者组实现,同时会伴随 RDB 格式的重大变更。
一次读取溢出的简短故事
3.0作者分享了Redis中一个难以复现的读取溢出bug的调试过程。通过分析崩溃报告中的内存地址和寄存器信息,最终发现这个bug实际上在几个月前已经修复,但由于代码合并时的疏忽未能及时应用到生产版本。文章强调了崩溃报告分析、汇编语言理解和模糊测试在系统软件开发中的重要性。
本文澄清了Incapsula报告中关于75%的Redis服务器被感染的误解,指出这仅指暴露在互联网上且未受保护的Redis实例。作者解释了Redis的安全模型、保护模式的作用以及未来Redis 6中ACL和SSL功能的改进计划。
Redis作者antirez披露了在Redis Lua子系统中发现的一系列安全漏洞,主要影响cmsgpack和struct库。这些漏洞对云服务提供商构成较大风险,可能导致内存损坏和进程控制。已发布Redis 3.2.12、4.0.10和5.0-rc2版本修复这些问题。
针对Redis Labs网站上关于新通用条款许可证的页面被误解为Redis本身变更许可证的澄清。Redis核心项目将保持BSD许可,而某些Redis Labs开发的模块将采用Apache+通用条款许可证。Redis Labs支持保持Redis核心开源,并为项目提供了大量资金支持。
Redis 创始人澄清 Redis 并非采用"开放核心"模式,指出开放核心需要从免费软件中移除有用功能并收费,而 Redis 保持核心 BSD 许可,Redis Labs 只是基于 Redis 技术开发了超出 Redis 范围的新功能模块。
Redis作者回应了关于继续使用"master/slave"术语的争议,认为在数据库语境中这些术语并无冒犯性,并阐述了自己反对政治正确、支持实质性社会变革的立场。
Redis作者antirez在Redis 5中引入LOLWUT命令,这是一个纯粹的艺术性功能,不解决任何技术问题,旨在提醒编程社区技术探索的初心和人文价值。该命令通过Unicode盲文字符在终端中生成动态艺术图案,并计划在每个主要版本中由不同贡献者创作新的艺术内容。
编写系统软件:代码注释
1.5本文通过分析Redis源码中的注释实例,探讨了代码注释的重要性及其分类。作者认为注释不仅能解释代码为何如此实现,还能降低读者的认知负担,是编写可维护、易理解代码的关键工具。
Redis 6将仅支持新的RESP3协议,不再提供RESP2兼容模式。这一决定旨在推动生态系统向前发展,虽然会带来客户端库和应用程序的更新需求,但通过长期支持Redis 5、提前在开发版中部署等措施来减轻迁移压力。
Redis作者针对社区对RESP3协议、ACL权限控制、多线程支持等新特性的疑虑,详细解释了各项功能的设计初衷和开发计划,强调ACL主要出于运维安全考虑而非企业需求,并阐述了Redis的发展理念。
在Redis诞生十周年之际,作者发布了一个Gopher协议实现作为礼物。这个100行代码的项目不仅是个玩笑,也反映了对现代互联网过度商业化、追踪和短暂注意力的反思。Gopher作为纯文本协议,提供了一个不受主流关注的"非酷"空间,让社区能在互联网喧嚣之外建立更高质量的交流环境。
Redis 5 引入的 Streams 数据结构不仅适用于消息传递场景,更是一个通用的数据结构。它类似于增强版的 CSV 文件,支持时间序列、范围查询和内存高效存储,比传统的 Sorted Set + Hash 方案节省 13 倍内存。
开源维护者的挣扎
4.0本文探讨了开源项目维护者面临的心理压力,包括信息过载、角色转变、时间管理困难、技术领导力焦虑、与不友善用户的摩擦,以及软件工作的徒劳感。作者以Redis维护者的亲身经历,揭示了在项目成功后继续维护的复杂挑战。
Redis 6引入了服务器辅助的客户端缓存功能,通过新的RESP3协议支持细粒度的键失效通知机制。该功能允许客户端在本地缓存数据,同时Redis服务器会跟踪哪些客户端缓存了哪些键,并在键被修改时发送失效通知,从而在保持数据一致性的同时大幅提升读取性能。
Redis 6 首个候选版本正式推出,这是迄今为止最具"企业级"特性的版本,包含SSL加密、ACL访问控制、RESP3新协议、客户端缓存等众多重要功能,预计将在2020年3月至5月间发布正式版。
Redis 6.0.0 稳定版正式发布,这是 Redis 有史以来最大的版本更新,包含 SSL、ACL、RESP3、客户端缓存、线程化 I/O 等多项重要功能。该版本在客户端缓存设计、ACL 日志、PSYNC2 复制协议等方面都有显著改进,同时提升了 RDB 文件加载速度和命令超时处理能力。
Redis冒险之旅的终结
8.0Redis创始人Salvatore Sanfilippo宣布辞去Redis维护者职务,将项目交给社区管理。他表示自己更愿意创造"艺术品"而非仅仅维护软件,未来将专注于提供新想法并探索个人兴趣。Redis Labs的Yossi Gottlieb和Oran Agra将接替维护工作。
为链表辩护
2.0作者针对当前对链表的轻视态度,从教育价值、可扩展性、实用性、简洁性和概念性等多个角度,全面阐述了链表的独特优势与魅力,呼吁重新认识这一基础数据结构的重要性。
从离开的地方重新出发
6.5Redis创始人antirez在离开项目四年多后宣布回归,将担任社区与公司之间的桥梁角色,并分享了对Redis许可证变更的看法以及正在开发的向量搜索新功能。他希望通过自己的回归能够帮助修复社区裂痕,让Redis核心重新成为开发重点。
Redis 8将引入Vector Sets作为原生数据类型,这是一种类似集合的数据结构,但使用向量作为评分标准而非标量。它支持向量相似性查询、元素过滤和线程化操作,并内置HNSW算法实现,支持量化和维度缩减技术。
本文通过复现三年前 Christopher Tarry 在 Hacker News 上提出的写作风格指纹识别方法,使用 Redis 向量集技术分析用户评论中的词汇使用模式,实现了基于 Burrows-Delta 方法的风格相似性检测,并提供了在线演示工具和完整代码库。
Redis 再次开源
8.0Redis 已从 SSPL 许可证切换回 AGPLv3 开源许可证,标志着该项目重新回归开源社区。创始人表示这一转变对于保持 Redis 项目的连贯性、获得用户接受以及参与更广泛的人类集体努力至关重要。
作者在将Redis从SSPL切换回AGPL许可证后,分享了几个重要发现:AGPL相比SSPL的主要优势在于其被广泛理解和接受;开源社区对软件分发仍然非常重视;不同用户群体对许可证的敏感度存在差异;以及最终交付优质软件才是最重要的。
人类程序员仍然优于LLM
3.0作者通过修复Redis向量集复杂bug的经历,展示了人类在创造性问题解决方面仍远超当前LLM。虽然LLM在验证想法和代码审查方面很有用,但人类能够构思出更巧妙、非常规的解决方案。
扩展HNSWs
3.5作者分享了在Redis中实现HNSW(分层可导航小世界图)数据结构的经验,重点讨论了内存优化、多线程处理、节点删除和可扩展性等高级主题。通过向量量化、双向链接和创新的内存回收策略,实现了高性能的向量相似性搜索。
Redis 编码模式
2.0本文提供了Redis命令和数据类型的详尽文档、常用模式、配置提示以及使用Redis命令实现的算法。该文档不仅对AI编码助手有用,对人类开发者同样具有实用价值。