Redis的过期数据回收策略有哪些?

Redis 在内存用完时会怎么办?如何处理已过期的数据?

和数据淘汰策略注意区分!

比如当一个key设置了xx秒过期,xx秒没有动他,于是key变成了过期数据。

有三种策略处理它,定时删除、惰性删除、定期删除。

定时删除,在设置键值对的过期时间时,创建一个定时事件,当过期时间到达时,由事件处理器自动执行删除操作。

  • 优点:保证内存可以被尽快地释放;
  • 缺点:在 Redis 高负载的情况下、或者有大量过期键需要同时处理时,会造成 Redis 服务端卡顿,影响主业务执行;

惰性删除:Redis 不主动删除已经过期的键,每次从数据库获取键值对的时候会判断是否过期,如果过期才删除,并返回 nil。

  • 优点:因为每次访问时,才会判断键是否过期,所以此策略只会使用很少的系统资源;
  • 缺点:系统占用空间删除不及时,面对一些冷数据的时候,会造成空间浪费。就只能靠Redis的淘汰策略兜底了;

定期删除:每隔一段时间检查一次数据库的过期哈希表(expires),随机删除一些过期键。Redis 默认每100ms秒进行1次过期扫描,此配置可通过 redis.conf 中的 hz 参数进行配置,默认值是 hz 10。

需要注意的是:Redis 每次扫描并不是遍历过期字典中的所有键,而是采用随机抽取判断并删除过期键的方式。

定期删除流程如下:

  • 1)从过期字典中随机取出 20 个 key;
  • 2)删除这 20 个 key 里面过期的 key;
  • 3)如果过期 key 的比例超过 25% ,重复步骤 1,否则结束;

同时为了保证过期扫描不会出现循环过度,导致线程卡死现象,算法还增加了扫描时间的上限,默认不会超过 25ms。定期删除执行流程

  • 优点:通过限制删除操作的时长和频率,来减少删除操作对 Redis 主业务的影响,同时因删除一部分过期的数据也能减少过期键值对造成的无效空间占用;
  • 缺点:系统占用空间删除不及时,导致空间利用率降低,造成了一定的空间浪费;
重生之八股仙帝 文章被收录于专栏

曾有一千古奇人,精修八股文,成遁世之高人,彻天彻地畅游天地间。 今人皆忙忙,急于求成,岂不知八股乃道门口径,背负天人,若经熟读背诵,更能开拓智慧之门,探寻未来之路。 天下繁华,不尽长夜,唯有读书为伴,熟读八股文更是攀登高峰之路。磨砺文字,升腾智慧,唯有勤玉立志,始可破天荒,登临九重不竭之巅! 吾辈修炼之路,虽曲折荆棘,但信念不曾磨灭,唯有铭记八股精髓,方能指引灵魂归宿,成就一生辉煌!

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务