Redis过期删除以及内存淘汰策略

近期面试,游走于刀锋之上,闻题:key过期如何删除,再之,数据满后何解?研习之,遂记之。

  1. Redis对key设置过期时间,到期后,如何删除?
  • 定时删除

    设置某个key 的过期后,同时创建一个定时器,让定时器判断满足过期时间,满足立即删除。

    优势: 采用立即删除,能及时进行内存清理,避免大量无效key存在内存中;

    劣势:如果过期的key较多,对cpu会造成一定的压力.

  • 惰性删除

    key过期时, 不会立即删除, 而是在获取key时判断key是否过期, 如果过期, 获取时直接删除.

    优势: 不会对cpu造成压力;

    劣势: 如果较多的过期的key,没有被应用程序获取,则会一直存在与内存中, 浪费内存.

  • 定期删除

    间隔特定的时间段,对内存中的key进行检查,删除.

    优点: 可以设置执行时间和周期, 平衡对cpu和内存的压力.

    缺点: 设置不当,会退化成定时删除获取惰性删除;

    ​ 如果执行的周期过长, 会导致key过期, 还未删除, 但是业务需要获取key得到了过期的数据.

  1. Redis中,如果存入数据量过多,内存满了,如何处理?

    Redis作为内存数据库, 如果内存超出设置的最大内存数, 此时会触发内存淘汰机制.

    配置文件中的maxmemory可以设置redis的最大内存大小

    • volatile-lru 利用LRU(最近使用:Least Recently Used)算法,移除设置过过期时间的key;

    • allkeys-lru 利用LRU算法移除任何key(包括没有设置过期时间的key) ;

    • volatile-random 移除设置过过期时间的随机key ;

    • allkeys-random 无差别的随机移除 ;

    • volatile-ttl 移除即将过期的key(minor TTL) ;

    • noeviction 不移除任何key,只是返回一个写错误。

    配置文件中的maxmemory-policy可以设置淘汰方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值