Redis 4.0将引入Streams数据结构,这是一种通用日志式数据结构,支持带字段的条目、范围查询、阻塞读取和消费者组功能,填补了Redis在消息序列和时间序列应用中的空白。
antirez-com
30 条来自 antirez-com 的内容
本文详细分析了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.5文章探讨了开源开发中的矛盾现象:程序员往往在无偿的开源项目中投入更多精力、追求更高品质,反而在付费工作中缺乏这种热情。作者认为,开源项目是开发者真实意愿的体现,用户对质量的严格要求并非滥用,而是共同追求软件完美的表现。
编程与写作
2.5作者通过暂停编程生涯开始写小说的经历,发现编程大型系统与创作小说有着惊人的相似之处:两者都需要在微观和宏观层面都表现出色,都需要持续性的努力,也都可能遭遇创作瓶颈。然而,最大的区别在于小说一旦完成就基本固定,而代码则需要不断演化。
写作《Wohpe》
2.0作者分享了自己创作首部科幻小说《Wohpe》的两年历程,探讨了从技术写作转向文学创作的挑战,以及学习写作与学习下棋的相似之处。他反思了文学市场与编程世界的巨大差异,并鼓励读者尝试文学创作这一"最高艺术"。
创作《Wohpe》
2.0作者分享创作首部科幻小说《Wohpe》的经历,将写作学习过程比作国际象棋初学者的成长之路——从随机选择到形成个人风格。他同时揭示了出版市场的残酷现实,指出文学创作投入与回报之间的巨大失衡,但强调创作过程本身带来的满足感远超商业成功。
为链表辩护
2.0作者针对当前对链表的轻视态度,从教育价值、可扩展性、实用性、简洁性和概念性等多个角度,全面阐述了链表的独特优势与魅力,呼吁重新认识这一基础数据结构的重要性。
Idle扫描技术诞生于1998年底,作者在开发Hping工具时发现IP包ID字段的递增规律,结合TCP/IP协议特性构思出这种无需直接暴露源地址的端口扫描方法。尽管最初发布时邮件表述不够专业,但这一技术最终成为网络安全领域的经典攻击手段。
作者从个人程序员视角分享2023年以来使用LLMs编程的经验。他认为LLMs如同"博学的傻瓜",能快速处理琐碎任务和探索未知领域,但在系统编程等需要复杂推理的场景中表现有限。文章通过具体案例展示了LLMs如何加速Python代码编写,同时指出其在C语言等底层编程中的不足。
作者尝试用GPT-4将意大利语博客翻译成英语,发现译文既保留了自己的声音又提升了质量。这让他既充满希望——人类将拥有能对话的机器,又感到恐惧——AI可能让人变得懒惰,不再愿意学习新语言。
本文提出了一种名为"首词截断"的新型LLM采样算法,旨在解决核采样方法的缺陷。该算法通过限制候选词与最高概率词的相对差距来确保生成质量,同时保持适当的创造性。相比传统的top-p采样,这种方法提供了更直观、可调的单参数控制。
本文介绍了如何在Raspberry Pi Pico微控制器上不使用数模转换器(DAC)而仅通过PWM引脚播放WAV音频文件。通过将音频文件转换为原始格式,利用高频PWM的不同占空比来模拟不同电压级别,从而实现复杂波形的音频播放。