redis

redis 的过期策略+内存淘汰机制+手写LRU 代码

2019-10-28  本文已影响0人  rs汀

1.话不多说,先提问题(某互联网公司面试~~~~)

线上写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,怎么办?

这是由 redis 的过期策略来决定。

2.redis 的过期策略

redis 过期策略是:定期删除+惰性删除。

答案是:走内存淘汰机制

3.内存淘汰机制

redis 内存淘汰机制有以下几个:

4.手写一个 LRU

利用已有的 JDK 数据结构实现一个 Java 版的 LRU

class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private final int CACHE_SIZE;

    /**
     * 传递进来最多能缓存多少数据
     *
     * @param cacheSize 缓存大小
     */
    public LRUCache(int cacheSize) {
        // true 表示让 linkedHashMap 按照访问顺序来进行排序,最近访问的放在头部,最老访问的放在尾部。
        super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
        CACHE_SIZE = cacheSize;
    }

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

猜你喜欢

热点阅读