Redis-过期策略与内存淘汰机制

Redis 过期策略

  • 定期删除+惰性删除
  1. 定期删除指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除
  2. 惰性删除:获取 key 的时候,如果此时 key 已经过期,就删除,不会返回任何东西

Redis 内存淘汰机制

  • noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错(默认使用的淘汰机制)
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(最常用的)。
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key
  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key(这个一般不太合适)。
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

Redis 内存淘汰机制修改

  1. 通过配置文件修改,需要重启Redis实例
  2. 系统运行时修改

LRU(Least Recently Used)算法

  1. 如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰
public class LRUDemo<K,V> extends LinkedHashMap<K,V> {

    // 容量
    private final int size;

    public LRUDemo(int size) {
        // true true 表示让 linkedHashMap 按照访问顺序来进行排序,就把当前操作的元素放到链表的第一位
        super((int) Math.ceil(size / 0.75) + 1, 0.75f, true);
        this.size = size;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        // 当 map中的数据量大于指定的缓存个数的时候,就自动删除最老的数据。
        return size() > size;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值