10 hours ago
- Redis传统上使用单线程模型,并配有后台I/O线程;阻塞的DEL命令在处理大键时可能导致服务器冻结数秒。
- 一种初始的增量释放方法使用定时器逐步释放内存以适应内存压力,但性能降低至正常水平的65%左右。
- 最终的解决方案转向了线程化惰性释放实现,这要求从数据类型和客户端输出缓冲区中消除共享的robj结构。
- 关键改动包括在输出缓冲区中使用动态字符串,以及在数据类型中使用SDS字符串,从而提升性能并提高内存效率。
- 新增的UNLINK命令提供非阻塞删除;FLUSHALL/FLUSHDB也增加了惰性选项。
- 未来计划包括为慢速操作引入线程化I/O和键级锁定,朝着无共享架构发展。
- 惰性释放分支目前正在积极开发中,目标版本为Redis 3.4。