Redis懒惰与内存回收机制.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

拓展6:平波缓进——懒惰删除

⼀直以来我们认为Redis是单线程的,单线程为Redis带来了代码

的简洁性和丰富多样的数据结构。不过Redis实际上并不是只有

⼀个主线程,它还有⼏个异步线程专⻔⽤来处理⼀些耗时的操作。

Redis为什么要懒惰删除(lazyfree)?

删除指令del会直接释放对象的内存,⼤部分情况下,这个指令⾮

常快,没有明显延迟。不过如果删除的key是⼀个⾮常⼤的对象,

⽐如⼀个包含了千万元素的hash,那么删除操作就会导致单线程卡

顿。

Redis为了解决这个卡顿问题,在4.0版本引⼊了unlink指令,

它能对删除操作进⾏懒处理,丢给线程来异步回收内存。

unlinkkey

OK

如果有多线程的开发经验,你肯定会担⼼这⾥的线程安全问题,会不

会出现多个线程同时并发修改数据结构的情况存在。

关于这点,我打个⽐⽅。可以将整个Redis内存⾥⾯所有有效的数据

想象成⼀棵⼤树。当unlink指令发出时,它只是把⼤树中的⼀个

树枝别断了,然后扔到旁边的⽕堆⾥(异步线程池)。树枝离开

⼤树的⼀瞬间,它就再也⽆法被主线的其它指令到了,因为

主线会沿着这颗⼤树来。

flush

Redis了flushdb和flushall指令,⽤来清空数据库,这

也是极其缓慢的操作。Redis4.0同样给这两个指令也带来了异步

化,在指令后⾯增加async参数就可以将整棵⼤树连根拔起,扔给

线程慢慢。

flushallasync

OK

异步队列

主线程将对象的引⽤从「⼤树」中摘除后,会将这个key的内存回

收操作包装成⼀个任务,塞进异步任务队列,线程会从这个异步

队列中取任务。任务队列被主线程和异步线程同时操作,所以必须是

⼀个线程安全的队列。

不是所有的unlink操作都会延后处理,如果对应key所占⽤的内

存很⼩,延后处理就没有必要了,这时候Redis会将对应的key内

存⽴即回收,跟del指令⼀样。

AOFSync也很慢

Redis需要每秒⼀次(可配置)同步AOF⽇志到磁盘,确保消息尽量不

丢失,需要调⽤sync函数,这个操作会⽐较耗时,会导致主线程的

效率下降,所以Redis也将这个操作移到异步线程来完成。执⾏AOF

Sync操作的线程是⼀个独⽴的异步线程,和前⾯的懒惰删除线程不

是⼀个线程,同样它也有⼀个属于⾃⼰的任务队列,队列⾥只⽤来存

放AOFSync任务。

异步删除点

Redis回收内存除了del指令和flush之外,还会存在于在key

的过期、LRU淘汰、rename指令以及从库全量同步时接受完rdb

⽂件后会⽴即进⾏的flush操作。

Redis4.0为这些删除点也带来了异步删除机制,打开这些点需要额

外的配置选项。

1.slave-lazy-flush从库接受完rdb⽂件后的flush操作

2.lazyfree-lazy-eviction内存达到maxmemory时进⾏

淘汰

3.lazyfree-lazy-expirekey过期删除

4.lazyfree-lazy-server-delrename指令删除destKey

扩展阅读

Redis懒惰处理的细节

()

您可能关注的文档

文档评论(0)

kay5620 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8001056127000014

1亿VIP精品文档

相关文档