1.过期数据:

redis自己有定时清空 redis的定期删除和惰性删除_数据


redis自己有定时清空 redis的定期删除和惰性删除_database_02


redis自己有定时清空 redis的定期删除和惰性删除_database_03


redis自己有定时清空 redis的定期删除和惰性删除_数据_04


2.删除策略:

2.1.定时删除:

redis自己有定时清空 redis的定期删除和惰性删除_数据库_05


redis自己有定时清空 redis的定期删除和惰性删除_redis_06


2.2 惰性删除:

redis自己有定时清空 redis的定期删除和惰性删除_数据库_07


expireIfNeeded这个函数,在调用任何对数据操作的时候,内部都将先调用这个函数,这个函数就是检查是否数据过期的,也就是所有的get操作都与这个函数挂钩的,也就是只要拿数据 都是执行这个函数

redis自己有定时清空 redis的定期删除和惰性删除_数据_08


redis自己有定时清空 redis的定期删除和惰性删除_数据库_09


redis自己有定时清空 redis的定期删除和惰性删除_数据_10


2.3 定期删除:

redis自己有定时清空 redis的定期删除和惰性删除_数据库_11


redis自己有定时清空 redis的定期删除和惰性删除_database_12


redis自己有定时清空 redis的定期删除和惰性删除_数据_13


简单来说 ,就是每秒中执行若干次serverCron操作,在这个serverCron操作中会对所有的数据进行轮训访问(databaseCron操作),在访问的时候会对每一个库中的key进行轮训访问(activeExpireCycle操作,)访问的策略是:随机挑选若干个key,而这个若干 w–是配置来的,配置出来以后 就要判断这个里面有过期的就删除掉,同时看删除的量占整体的量是多还是少,如果多那么就再来一轮,如果少就停—再去下一个里面去找,同时记录你现在找到了哪个expires【*】,按照以上形式 一轮一轮的来进行。----这样呢,就利用了cpu的25%的时间阶段性的对它们(expires中的数据(过期数据))进行操作。--------那么这样的话,内存中的过期数据也会得到清理,cpu也不会一直在占用。----所以这就保证了 cpu和内存都不会是极端的情况

redis自己有定时清空 redis的定期删除和惰性删除_redis自己有定时清空_14


redis自己有定时清空 redis的定期删除和惰性删除_数据_15


在redis内部是采用 惰性删除+定期删除3.逐出算法:

redis自己有定时清空 redis的定期删除和惰性删除_数据库_16

redis自己有定时清空 redis的定期删除和惰性删除_数据库_17


redis自己有定时清空 redis的定期删除和惰性删除_数据库_18


redis自己有定时清空 redis的定期删除和惰性删除_redis自己有定时清空_19


redis自己有定时清空 redis的定期删除和惰性删除_redis自己有定时清空_20


redis自己有定时清空 redis的定期删除和惰性删除_database_21


redis自己有定时清空 redis的定期删除和惰性删除_redis_22


redis自己有定时清空 redis的定期删除和惰性删除_database_23


redis自己有定时清空 redis的定期删除和惰性删除_database_24