1.惰性删除
通过主动去请求key,发现已经过期,主动删除
2.LRU过期策略---最近最少使用
概述:LRU 是 Least Recently Used 的缩写,即最近最少使用,是内存管理的一种页面置换算法。算法的核心是:如果一个数据在最近一段时间内没有被访问到,那么它在将来被访问的可能性也很小。换言之,当内存达到极限时,应该把内存中最久没有被访问的数据淘汰掉。
那么,如何表示这个最久呢?Redis 在实现上引入了一个 LRU 时钟来代替 unix 时间戳,每个对象的每次被访问都会记录下当前服务器的 LRU 时钟,然后用服务器的 LRU 时钟减去对象本身的时钟,得到的就是这个对象没有被访问的时间间隔(也称空闲时间),空闲时间最大的就是需要淘汰的对象。
public static void main(String[] args) { int cacheSize = 3; // 最大容量 = (缓存大小 / 负载因子)+ 1,保证不会触发自动扩容 LinkedHashMap cache = new LinkedHashMap( (int)(cacheSize/ 0.75f) + 1, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { return size() > cacheSize; } }; cache.put("1", "a"); cache.put("2", "b"); cache.put("3", "c"); // head => "1" => "2" => "3" => null // put已存在的值,和get方法是一样的效果 cache.put("1", "a"); // head => "2" => "3" => "1" => null; cache.put("4", "d"); // head => "3" => "1" => "4" => null; for (String key: cache.keySet()) { System.out.println(key); } }
https://blog.csdn.net/weixin_34417635/article/details/91477695