讨论一下redis的过时键删除机制

近来从新复习了一下redis,对redis的理解又深刻一层。redis

百度谷歌上搜到资料有一些压根是错的,可是却被放在了搜索结果前几个,感受无奈无爱! (固然我也不保证个人是全对的,毕竟不一样角度有不一样的见解)数据库

参考资料书籍:Redis设计与实现 出版社:机械工业出版社。P107 ~ P111服务器

问题:若是一个键过时了,那么它何时会被删除呢?有三个答案并发

定时删除:在设置键的过时时间的同时,建立一个定时器,让定时器在过时时间来临时,当即执行对键的删除操做 .。

这种过时策略对内存友好,但对CPU是很是不友好的。由于还要主动设定定时器并主动删除,即经过CPU换内存(CPU主动删除了内存中的数据嘛,CPU忙,内存空闲)。能够想象一下在大数据大并发的时候,这种机制是多么灾难大数据

惰性删除(Lazy Expiration):redis内部不会监视记录是否过时,可是每次从键空间获取键时,检查记录是否过时。这种技术被称为lazy(惰性)expiration。

与定时删除相反,此删除机制对内存是不友好的对CPU是友好的,惰性删除不会主动去删除已到期(expire)的键,而是等有须要调用的时候再判断,即内存换CPU(内存中有大量残留数据)设计

按期删除:每隔一段时间,对redis数据库进行一次检查,删除里面的过时键

属于前两种方法的折中.但要注意操做检查执行的时间和频率,若是删除操做作的太频繁,或者检查执行的时间太长,按期策略就会退化成定时策略。code

若是检查执行的频率太少或者检查执行的时间太少,就会变成和惰性策略同样。内存

Redis服务器实际使用的是惰性删除和按期删除策略两种策略,配合使用两种策略和在使用CPU和内存找到平衡点。io

惰性删除为redis服务器内置策略,按期删除在redis.conf 的hz选项,默认为10 (即1秒执行10次,100ms一次)百度

相关文章
相关标签/搜索