Redis五问(二)内存管理

过期淘汰策略

Redis给缓存数据设置过期时间有啥用?

因为内存是有限的,如果缓存中数据都一直保存的话,会导致OOM。

惰性删除

  • 客户端访问某个key时,redis会检查该key是否过期,若过期则删除

定期扫描

  • redis默认每秒执行10次过期扫描,扫描策略如下:

  • 1.从过期字典随机选择20个key

  • 2.删除这20个key中已过期的key

  • 3.如果过期的key比例超过25%,则重复步骤1

Redis内存淘汰策略

当Redis占用内存超出最大限制,可以采用如下策略让Redis淘汰一些数据,腾出空间继续提供读写服务

  • no-eviction:对可能导致增大内存的命令返回错误,不让写了!

  • volatile-ttl:在设置了过期时间的key中,选择剩余寿命(TTL)最短的key将其淘汰

  • volatile-lru:在设置了过期时间的key中,选择最少使用的key将其淘汰

  • volatile-random:在设置了过期时间的key中,随机选择一些key将其淘汰

  • allkeys-lru:在所有的key中,选择最少使用的key,将其淘汰

  • allkeys-random:在所有key中,随机选择一些key淘汰

4.0版本新增两种:

  • volatile-lfu:从已设置过期时间的数据集中挑选最不经常使用的数据淘汰

  • allkeys-lfu:当内存不足以容纳新写入数据时,移除不经常使用的key

LRU算法

维护一个链表,用于顺序存储被访问过得Key。把最新访问过的数据放在表头,即最近访问的key在表头,最少访问的key在表尾

近似LRU

给每个key维护一个时间戳,淘汰时随机采样5个key,从中淘汰调最旧的key,如果还是超出内存限制,则继续随机采样淘汰。

优点:比LRU算法节约内存,但可以取得相当的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值