借助LinkedHashMap实现基于LRU算法缓存

时间:2022-05-24 10:45:06

一、LRU算法介绍

LRU(Least Recently Used)最近最少使用算法,是用在操作系统中的页面置换算法,因为内存空间是有限的,不可能把所有东西都放进来,所以就必须要有所取舍,我们应该把什么东西放进来呢?有没有什么判定标准呢?页面置换算法就是干这个的,企图通过之前的行为预测到之后的行为(这是概率问题),而LRU就是其中的一种,它的基本思想就是既然有一块数据,最近的一段时间内它是最少访问的,这说明在这之后它也可能是最少访问的,如果非要移除一个的话,我只好把它置换出内存了。

总结一下:

LRU:在空间有限的情况下必须做出取舍,将最可能最少被访问的数据置换掉。

 二、为什么使用LRU

QUESTION: 我用HashMap也挺好的啊,为什么要使用缓存昂?!

用数据说话,做一个实验来说明为什么要使用缓存,new两个Map底层分别使用HashMap和LinkedHashMap,然后往里面装一百万条数据,然后分别总是访问同一条数据十万次和随机访问十万次:

 import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Random; public class Main { public static void main(String[] args) { Map<Integer,Integer> map1=new LinkedHashMap<Integer,Integer>(,0.75F,true);
Map<Integer,Integer> map2=new HashMap<Integer,Integer>(); for(int i=;i<;i++){
map1.put(i,i);
map2.put(i,i);
} // 大量访问同一条数据
long start=System.currentTimeMillis();
for(int i=;i<;i++){
map1.get();
}
System.out.printf("HashMap: %dms\n",System.currentTimeMillis()-start); start=System.currentTimeMillis();
for(int i=;i<;i++){
map2.get();
}
System.out.printf("LinkedHashMap: %dms\n",System.currentTimeMillis()-start); //随机访问数据
start=System.currentTimeMillis();
for(int i=;i<;i++){
map1.get();
}
System.out.printf("HashMap: %dms\n",System.currentTimeMillis()-start); start=System.currentTimeMillis();
for(int i=;i<;i++){
map2.get(new Random().nextInt());
}
System.out.printf("LinkedHashMap: %dms\n",System.currentTimeMillis()-start); } }

结果如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKcAAABQCAIAAADz4/IaAAAFIUlEQVR4nO1cu9ndIAz1PJd5mOcySmoPkCojpGSBNBkhLSlsQALJ7xeWzvcX1xhkwQGM0fnpQgh//v5Lfz9//Q4k/PfTdbbPF/F3b3N66O3wE2YY8ny+nv+ds8O7/vv5fD1KA17M+gAT/ffTIcP5gkNpv4NXQ2nSsem6TDwFZq/bEPmM6pvQW5gIClR+dmEh67WzXWzH8QI2zKGsgwd8rE2G53yIZA2Zvnae6KqKyRS6yD5Sjq1jHdpAT4PI3byuI0Bifaw37jLQz42sKx4IPNanoKxfiTz5TAzZvdYXGFXWJUJZlwiW9R+K90LHukQo6xKhrEuEsi4RyrpEKOsSMcd63E2yPf69Et4ZquBg0ThfJmypynpUj1+UXjeBM2NyXeSZmB/r3hkUz9i6i4jswFQUzTKGynUGvDOd7UNvC6pm0kc/USwm5qRDYQ/EDtbBpnLRQKnvd8aYOHC9M9alOyk454ztxyfA34x9Z7quM85Z5sk4JLoEFbtcOmwH7wxZaswzdGVjRmeq/XGyfa7EItZhwCDXtu9hNcgW6W2err0zqXTOM7RTb43zQ48CrNP20eQAB2B84EmsF92QsxVAbeNrcewJY8CUaZ8rsXqs57bA3QFH04lk2s6Y2tvYlDkXY7/gmX5xLMdy1qNaI4TgnS0LJZrT5UBnnB09OYnd9ELYzDp4nU00fW/hWOdZzyM7XXP2i8n1MtZRAr4Lp7GcxLKOjDY11lOtQtnNEStgHTDDekjFYyOx9tGsiMtf9F6Hd+lZmmeda58rMcN6mmXhl9vgNZiAjbX5ZYuXAVHtRNoZiiWTHq31ePugXDnEVrBeKhwic1w6PTMXq57CddvHd5dPHytk+1yM9nZpmOWzYgUaYx2M/xteh69BY6wrDoGyLhHKukQo6xKhrEuEsi4RyrpELFVVcBtJaLt8EmOQdMsGS47NvFjlUWzynboVtWisc3vVa7FjWy0HMd+q8oDucPH7o7Cd9bTZXEWfOmtpqdFQF7B1HeMSxKZ3wPkWsP4OlcdoFrTMCeqMvWO97pUwQlbcBaxD13HIfvQevjrADP96lUfA/focdcYprNMqjNQ3mQGNJoDikSDw+nKVR2HhHHXGataLWq1l3dpCUQhUR9wjwxLW36LyKBQD56gzLmbdOF9KSZmvALROK2bmN6s8qPaFnh+izlj15YanYCp5QoWRvtxSSbwmqiYrNIHZUZzwXpVHiI6h6T09/1B1hu7S7EWLKg9lfRcaVXko6xKhrEuEsi4RyrpEKOsSoaxLhLIuEXpWBbEfzJ09gTfr5vM/FnpWRf2/q8zZEyDCoWdVEH28JRXDpE4I1h1lZCJrXs+qCE2oGKZYR1HgknWCLT2rokp+qIqBY71Q/MyyXuQ/Rw1xFPSsCoJ1OC3BqjBdmMp/jhriKOhZFcRqjmYCHEZTLm/0rIpWVAz0mRSVjg/aKsS9bP7T1BBHob1dmhZVDE9DY6w3qmJ4GhpjXXEIlHWJUNYlQlmXCGVdIpR1iVDWJULPqqgedJ/KI2/0kQG947by9KyKKhU07pUqjyIqXUsWrNv977IRelYF9vN2lUf0AhoaJ1QYou92qTb0rAqc52aVRw5wpaRsEvb3faoNPasC27ld5RE9xl2+6uX7VBt6VgW2c7vKAzhUphVjfYdqQ8+qqOzcpPKAcwYttl3G+hLVhp5V8RSVR7Fc5O6h9fBW1Ybu0uxFiyoPZX0XGlV5KOsSoaxLhLIuEcq6RCjrEqGsS8R/eqka6aeB3nAAAAAASUVORK5CYII=" alt="" />

我们打一个表格以便于分析:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcYAAABQCAIAAAAMSEKUAAAKMklEQVR4nO2d26GrIBBF6cd67Md6rCf9eD7MUV4zDANqHPb6SuQ94Arx3BvcBgAAoBPu6Q4AAIAdoFQAAOgGlAoAAN04leoAAADUQyr1PpODN4OlogahsweUClrBUlGD0NkDSgWtYKmoQejsAaWCVrBU1CB09rhJqfJnurUPgB9ZlGmjfDfUnWQK1gaqV5curWo0EDp7PLNLFVZem63oFJ19hH2TWPUi8UmypaGQ1NyrdZAFobPHA0qV19wulO5tqfPrqrros0depGPrIKU1dOvs3Lx26gzowt1Kraq2vQ/ZvaRil7pM+ZUrqa04iqeU2rhPr229C59lcs5Ny+e2Fi/lZqWus+sQvb2Wy0z+9im+T6mMfai2rlCqJuc6u2lRt/I7SuXzX6LU/f5wbg/g+abhfvksU7b8Xrmf9Pm/pG/sYpjQHZH70klhVPTqWOdvfy6YX6aTr5jiW5Vam1SUb3F75Ur7Moncoy1qmlOoVKotJoOwh8JsTIf5/DyFssftl3mngZZCvH1aJvfj34vLYW+PV0hnpW7953d7+RQ7nVIVNz9TIZUkvPN5JfGjYFK/EFtUx8qa6p7kenUPKxXpxB8GQvRK3W+QL/FN5CfO83wk7/fbuYcLqpvno/7wHdPcXtW8esl37XrK8acUdQYgTP7/bp+Lz7fctCxzGgV+Ms4d6H+oJEotVNl7iunm7pzi+DanErq3VExSXJT02RFCocoyT1GpstRb4XWmKnke4cUus1yoJFjo0T2+rsfrTxjp5Nb07zf/jvGKrbOb188yTcu2bes8LZ9ISGRz0ebns0z3WFWvVCb5s0z5+HwTd1tFhouyRRmCt1GwdPMb973LFHPN3TbFtyqVodgzyUVhn/387v/fNuWz0k9RoVRpJcwuhn1eGKR5sxB9K1zn8H7btmWalnW/68K26ebWOVbMOnf4flykVqmJQQmleuGKcvzHINm7pvfkUclnmaJGhLvU0vPgzlPMNnfbFMe3OZXQvaVi0nVKPXIWfEpvUTetUiOK3e6oVOpK+0RrlRotcm4/5v9lu3i/7RuS/1f+rU82l7bd+xlmnkeUOi2feI8WFolRKrVifrcOU1xo7rYp/lGlUpkZffiSEvakIDX2D/2MlPm3TH+qkvgML1Bq5qs3uW3077Hy/ZZtu9RcsKnhFdOPp5S65R60BHu2cPEnIXdlpbIBT1tsnWJBc/dMsRGlMnZgBMfsNLfShxjT6A8qle9k41wzxc+vYsE/snHnXX1+S5v9fzQZP6D7X/3RX2WObNM8T2feqPJvnXxz3wthkasRhS5kX5OZxD1EZ+Dm1Y/P8jkS99fRXCR1ck8GzuBp53e7YIqLzd0zxe4Hn6UyTWeTjovFVL6hIEPpQ4xpVD6cYga+rLxgsUst0919qdzPPV/zUwyE7i3cNsW3KlWSRGkxFSJVFe9rYYXCCeCkTOTJ9kRYfzFJEigqVT3jBrwApZrHoFKBVd6+VLzvi3f/N8i3h+4t3DnFUCpoBUtFDUJnDygVtIKlogahsweUClrBUlGD0NkDSgWtYKmoQejswSkVAABALaRSr9Y5sAGWihqEzh5QKmgFS0UNQmcPKBW0gqWiBqGzB5QKWsFSUYPQ2UOv1DQDX0S+emofANdSVVw+zGFvj2EH3g5CZ4+mXarOqkVLKmxehejvdMmvoqQvqF51/wz4cWyP7lIQOnt0VmqXflyq1KzgshUeHwDC7jHOtX3n2B7dpSB09mhS6pGz78azuJlVL8Ss9SifUsMpXoFSU8LzkGRJ5w9qJqlM0qvgQ5ec6vRjZ4GCHB2UKsmvUGpLbRJS70vyZKWcJlE6Ngk/uuOk9fQgYSYp+JH26Afo/cPoglPg3kdJqdEP7b94pOOgVCrjGr4ZZusnrEqSoVg8ai5bob/lTPvJK7VXV1+BcIzMAfKZpNAf9FlHj/3UaRcqlsddZ7eARpp2qamYqH0ZZSJeQ0X/ZveDTCnmY4Bpws+wJZIVjsUwlyh1W+fg7CNKm+t8HObmnJum/bvyeWJ7eCzSgX9q/IPIl8d5HNM7RzoOseKohGJhypXR21qlSipRU6wnm4FR6pHEmN0e1yg1OEqIKOmfqvktMK/eC/IguF95XiBfFUGIXjjScRhLqZTsUuvxSWmH/TxMWExyiVK5Ezq3bfNt4l35FvEPIj6zUKfGP4h0eUTf+l840nF4QKlZVd2jVKb/fAZeqcXMtrlCqfSxw//J6d6rJBqfcH/7GMLQRdF440jHoYNSs4rh3/L9qPKvgrSebIVMi1R+/wW1ybXHVbvU4OGglyH8LhscHE+Lhjk1/kGUoXvhSMehVanFLZuwtqqdXYuhqIaoOrNCZJQ64F61MDrmX1ey//AySAwfDmYKBefX72+OF9PyIU+NfxbRwoi+9b9zpOPQqlQq828qle9VdhQu+cxIr2SvQ6mgCEJnjyal5qv41xCTJ00VCuj46BX2TV1Pmkq51a8tSs1et4ft0V0KQmePDkoFg4OlogahsweUClrBUlGD0NkDSgWtYKmoQejsAaWCVrBU1CB09uCUCgAAoBZSqVfrHNgAS0UNQmcPKBW0gqWiBqGzB5QKWsFSUYPQ2QNKBa1gqahB6OyhV2qagS9y0eqpfVqc7QnVN6x4CYiSGoTOHk27VJ1VefHV/k1Nrn7JC6Zs0dTDglCoQejs0VmpvfohT5UrdfOcnr3OlK398BgKhEINQmePJqUeOTvuJWtTDz9SHZDsNItXoFQGSSg0J0ufaYMeOr1twXEx9E9M4zemf4gOSpXkb1Fq35oZ3TPeZHQM+FCUTpYmj48+T5oe9dDpYHTUQQZumiYo9YdQKpURE98Ms09kGpIPgM/gbznTpnmlylscDWFAUqVyx0eHh077P00/6KHTuZHuln11BOzRtEuNRMNs4iht8Uql3EfVwMs6+yIrWb57UGqEWqkh/8dHb9uWHu/BHK00xqHT6S712LsHZ6S8MAjG6KlUrt56pQp1VluzxN3+9SMpS1rVgPRQanzonEypQxw6/f80NeyvN/RgZC8MgjF+VKlX1MwIMVVqlIfX+uC0KjU9Plqi1KEOnd7iXeonGIy3E31hEIzxgFKzXpNXRWVukXiq1GJmcNCk1OxfXbbYoZlTl0c6dPoLMZp4l/q2IBijg1KzPipqkeoHL9D0Sq2si6plepWtH+iVSh0f/c3vn6QaPQ4c4tDpUHnk93S5Un8zCMZoVWpxfyesjcnAl1XUnBUio1TsVXkKoSBPliaOj84VpM6iPlPfeRRzcRX53c7oL/pXq+8MgjFi9VEJfOGioRTiE5atrXlfS1vOj9QossOUxGcQEAo1CJ09mpSar+LfWUyeNPUKpR4fxlQrlFv9slFq9vrgIBRqEDp7dFAqGBwsFTUInT2gVNAKlooahM4eUCpoBUtFDUJnDygVtIKlogahsweUClrBUlGD0NmDUyoAAIBa8koFAADQCJQKAADdgFIBAKAbUCoAAHTjDz/P/hFdh2EzAAAAAElFTkSuQmCC" alt="" />

首先进行横向比较,无论怎么访问LinkedHashMap总是要比HashMap快得多,

然后进行纵向比较发现HashMap访问同一条数据和随机访问花费的时间差不多,因为它是无状态的,也就是它并不能根据之前的结果帮助到以后的查询,LinkedHashMap的随机访问明显要慢一些了,LRU的策略主要就是用于短时间内频繁的访问相同的数据的。

三、如何使用LinkedHashMap实现LRUMap

继承LinkedHashMap然后覆写removeEldestEntry方法即可,这个方法在每次添加元素之前调用来判断是否需要删除元素,如果需要的话就会用LRU算法移除掉最近最少使用的元素,如下:

 import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry; public class Main { public static void main(String[] args) { Map<Integer,Integer> map=new LRUMap<>(); map.put(,);
map.put(,);
map.put(,);
map.get();
map.put(,);
map.put(,); for(Iterator<Entry<Integer,Integer>> iter=map.entrySet().iterator();iter.hasNext();){
System.out.print(iter.next().getKey()+" "); //2 7 11
} } } class LRUMap<K,V> extends LinkedHashMap<K,V>{ private int capacity; public LRUMap() {
this();
} public LRUMap(int capacity) {
super(capacity,0.75F,true);
this.capacity=capacity;
} @Override
protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
return size()>capacity;
} }

内存情况如下(最左端为最常访问的):

申请空间:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcgAAAB0CAIAAACOvDUHAAADzElEQVR4nO3UOYpbQQBFUS3tKxVahjbdoPgjUOKhPQ/lwI1NxQpEXc5ZwYML73C5XDYWJ2KAiAGXy2WMMcY4bNs2WJyIASIG/IvoWAtEDBAxYNu2fd/v9/th27bfLE7EABED/h7rvu+OtUDEABEDHGuKiAEiBjjWFBEDRAxwrCkiBogY4FhTRAwQMcCxpogYIGLAdKy/WJyIASIGONYUEQNEDHCsKSIGiBjgWFNEDBAxwLGmiBggYoBjTRExQMQAx5oiYoCIAdOx/mRxIgaIGOBYU0QMEDHAsaaIGCBigGNNETFAxADHmiJigIgBjjVFxAARAxxriogBIgY41hQRA0QMmI71B4sTMUDEAMeaImKAiAGONUXEABEDHGuKiAEiBjjWFBEDRAxwrCkiBogY4FhTRAwQMWA61u8sTsQAEQMca4qIASIGONYUEQNEDHCsKSIGiBjgWFNEDBAxwLGmiBggYoBjTRExQMSA6Vi/sTgRA0QMcKwpIgaIGOBYU0QMEDHAsaaIGCBigGNNETFAxADHmiJigIgBjjVFxAARA6Zj/criRAwQMcCxpogYIGKAY00RMUDEAMeaImKAiAGONUXEABEDHGuKiAEiBjjWFBEDRAxwrCkiBogY4FhTRAwQMcCxpogYIGKAY00RMUDEAMeaImKAiAGONUXEABEDHGuKiAEiBjjWFBEDRAyYjvULixMxQMQAx5oiYoCIAY41RcQAEQMca4qIASIGONYUEQNEDHCsKSIGiBjgWFNEDBAxYDrWzyxOxAARAxxriogBIgY41hQRA0QMcKwpIgaIGOBYU0QMEDHAsaaIGCBigGNNETFAxIDpWD+xOBEDRAxwrCkiBogY4FhTRAwQMcCxpogYIGKAY00RMUDEAMeaImKAiAGONUXEABEDpmN9ZXEiBogY4FhTRAwQMcCxpogYIGKAY00RMUDEAMeaImKAiAGONUXEABEDHGuKiAEiBkzH+pHFiRggYoBjTRExQMQAx5oiYoCIAY41RcQAEQMca4qIASIGONYUEQNEDHCsKSIGiBjgWFNEDBAxYDrWDyxOxAARAxxriogBIgY41hQRA0QMcKwpIgaIGOBYU0QMEDHAsaaIGCBigGNNETFAxIDpWN+zOBEDRAxwrCkiBogY4FhTRAwQMcCxpogYIGKAY00RMUDEAMeaImKAiAGONUXEABEDpmN9x+JEDBAxwLGmiBggYsD/Yz2fzxuLOx6Pz57Ao0QMOJ1Ob8c6xhhj7Kzv5eXl2RN4lIgNb8d6u92evYRHXa/XZ0/gUSIG3G63P32YOLdr1PdpAAAAAElFTkSuQmCC" alt="" />

map.put(,);

aaarticlea/png;base64,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" alt="" />

map.put(,);
aaarticlea/png;base64,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" alt="" />

map.put(,);
aaarticlea/png;base64,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" alt="" />

map.get();
aaarticlea/png;base64,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" alt="" />

map.put(,);
aaarticlea/png;base64,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" alt="" />

map.put(,);

aaarticlea/png;base64,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" alt="" />

所以最后打印出来的就是2 7 11。