Redis学习笔记 – 过期键删除策略

Redis 数据库中的所有键的过期时间,都保存在redisDb结构中的 expires 字典中, 我们称该字典为过期字典

过期字典的键:键是一个指针。指向键空间中的某个键对象

过期字典的值:值是一个 long long 类型的整数, 保存键指向的数据库键的过期时间

三种过期键删除策略

  • 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作

定时删除策略对内存是最友好的,另一方面,它对CPU是最不友好的,因为创建定时器、删除过期键都会占用相当一部分的CPU时间

  • 惰性删除:每次从键空间获取键时,检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键

惰性删除策略是对CPU时间最友好的,但对内存是最不友好的。如果数据库中有非常多的过期键,而这些键又恰恰没有被访问到,那么它们也许永远也不会被删除

  • 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。

定期删除策略是定时删除策略和惰性删除策略的整合和折中。

定期删除策略,每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率,来减小删除操作对CPU时间的影响。通过定期删除过期键,可以有效减少因为过期键而带来的内存浪费。

Redis的过期键删除策略:

Redis 实际上采用的是惰性删除定期删除两种策略。通过配合使用这两种删除策略,可以很好地在CPU时间和内存空间之间取得平衡。

Built with Hugo
主题 StackJimmy 设计