LRU算法简介
LRU英文翻译过来就是least recently used,字面意思就是最近最少使用,说白了就是一种淘汰算法,当有新的元素插入进来的时候,我们的使用空间又是有限的时候,就需要淘汰旧的元素,这时候就会选择淘汰最近最少使用的元素。
使用场景
我们实现一个功能就是登陆的时候会保存每个user的ip,首先这个ip会插入数据库里面,系统启动的时候会更新到缓存里面,如果所以每次用户登陆的时候我们会先查询缓存里面是否有这个user,如果没有再查询数据库,如果数据库没有就会请求api查询这个user的ip然后更新到缓存跟数据库,随着user的增加缓存的数量也会增加,这样就会非常的耗内存,所以我们会制定一定数量的内存然后存取一定数量的user,然后就会面临着一个淘汰的机制,这个时候LRU算法就派上了用场。
简单实现
/**
* Created by dc on 2019/6/29.
* lru算法 least recently userd 最近最少使用的数据
*/
public class LruMap {
/**
* 头部节点,最后被使用的数据
*/
private Node head;
/**
* 尾部节点,最近最少被使用的节点
*/
private Node tail;
/**
* 存储数量
*/
private int limit;
private Map<String,Node> data;
public LruMap(int limit) {
this.data = new HashMap<>();
this.limit