Redis曝新BUG:内存超限后的死循环

jopen 12年前
     <div id="news_body">     <p> <a title="查看 Redis 的全部文章" href="/misc/goto?guid=4958332294742668083" target="_blank">Redis</a> 曝出了一个新 bug,如果你设定了 Redis 的 maxmemory,并且这个 Redis 有 Slave,那么当你的 maxmemory 限制达到后,就会出现死循环。具体原因和流程如下:</p>     <ul>      <li>Redis 达到了配置中设定的 maxmemory 限制,开始按 LRU 策略删除数据</li>      <li>被过期清除的数据会生成 DEL 日志推送到 Slave</li>      <li>但是如果 Slave 达到一定数量时,这条 DEL 日志使用的 output buffer 空间可能会超过刚刚清除数据空闲出来的空间,这时候会导致空间又超限了</li>      <li>于是整个清除过程就变成了死循环</li>     </ul>     <p> 而且这个问题不仅会出现在 Slave 的情况下,在写 AOF buffer 的时候也会发生同样的问题。</p>     <p> Redis 作者随后发布了补丁(<a href="/misc/goto?guid=4958332295544530299">This fixes issue</a>)对这个问题进行修复。目前此 bug 的修复已经合并到2.4的主干中,截止目前为止,Redis 官方2.4.8稳定版本中已经包含对此问题的修复。</p>     <p> 问题地址:<a href="/misc/goto?guid=4958332296341829136" target="_blank">issues #327</a></p>     <div id="come_from">      来自:      <a id="link_source2" href="/misc/goto?guid=4958332297133800142" target="_blank">blog.nosqlfan.com</a>     </div>    </div>