近来从新复习了一下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一次)百度