首先确认,并不会马上删除,Redis也是有过期删除策略的:

1、定期选取部分数据删除。

2、惰性删除。

定期删除:

所谓定期删除,就是Redis定时去删除过期数据,Redis每100ms执行一次,每次随机抽取20个设置了过期时间的key,检查是否过期,如果发现过期了就直接删除。

具体执行步骤如下:

1、从所有设置了过期时间的key集合中随机抽取20个key。

2、删除抽取的key中已经过期的数据。

3、过期的key超过25%,则继续随机抽取,直到不超过25%。

惰性删除:

惰性也可以理解成懒,原理也很简单,当客户端发送请求查询某一个key时,检查key是否过期,如果过期了,则删除该key。将删除数据的主动权交给了客户端。

总结:

为什么会同时存在两种删除策略呢?个人理解是互补,相互减小压力。

假如Redis中存放了500W个key,且都设置了过期时间,使用定期删除也是需要很长时间才能将过期数据删除,在这期间还会不断有新的过期数据产生。这个时候惰性删除就能帮上忙了;反之也是同样的道理,一个已经过期的key=test1,客户端从来没人访问过,这时候惰性删除就不能起作用了,只能依靠定期删除来清理掉这个key。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐