数据库键的过期时间都保存在过期字典中。
过期键删除策略有三种:
定时删除(主动):在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即对键进行删除操作。
惰性删除(被动):放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除改键。如果没有过期就返回该键。
定期删除(主动):每隔一段时间,程序对数据库进行一个检查,删除里面的过期键,至于要删除多少过期键,以及检查多少个数据库,有算法决定。
定时删除优点:对内存最友好,及时删除,释放内存。
定时删除缺点:对cpu时间不友好,在过期键比较多的时候,删除过期键会占用相当一部分cpu时间,当内存不紧张,cpu紧张时,将cpu时间用在删除和当前任务无关的过期键上,会对服务器的响应时间和吞吐量造成影响
惰性删除优点:对cpu时间非常友好
惰性删除缺点:对内存不友好
定期删除优缺点:定期删除是前两种删除方式的中和。每隔一段时间只需一次删除操作,控制删除操作的时长和频率减少对cpu的影响;并且定期删除能有效减少内存浪费。
定期删除难点:确定删除操作执行的时长和频率。执行太频繁会退化成定时任务;执行太少会退化成惰性删除。