LRU 算法: 最近最少使用算法
具体案例方面
在 Mysql innoDB 5.6版本以后引入了 缓存池这个配置 。
InnoDB维护一个称为缓冲池的内存存储区域 ,用于缓存内存中的数据和索引。了解InnoDB缓冲池的工作原理,并利用它来保存内存中经常访问的数据,这是MySQL调优的一个重要方面。
LRU算法有以下的标准算法:
1)3/8的list信息是作为old list,这些信息是被驱逐的对象。
2)list的中点就是我们所谓的old list头部和new list尾部的连接点,相当于一个界限。
3)新数据的读入首先会插入到old list的头部。
4)如果是old list的数据被访问到了,这个页信息就会变成new list,变成young page,就会将数据页信息移动到new sublist的头部。
5)在数据库的buffer pool里面,不管是new sublist还是old sublist的数据如果不会被访问到,最后都会被移动到list的尾部作为牺牲者。
在学习 Redis 缓存淘汰中同样也存在 LRU(默认配置)
链表 + hash表实现
当某个key被访问到了,程序通过哈希表迅速定位节点,并将该节点调整至链表最开始位置
当链表满了 就会淘汰掉最末尾的key