LRU 算法底层数据结构实现原理

前奏:如果 CPU 访问的页面不在内存中,则操作系统需要进行置换出内存中的页面,然后把需要访问的页面从磁盘中置换到内存中,而这种算法最常见的就是 LRU 算法,LRU 算法也被称最近最少使用算法.

假如现在有一个需求,公司需要抽出一个用户系统,向各个业务系统提供用户的基本信息

在这里插入图片描述
设计方法1:用户信息存储在数据库,但是如果每一次请求都去查询数据库的话,会大大的降低性能,所以可以选择在内存中创建一个哈希表,每次先去哈希表中查询,如果找不到再去数据库查询.

在这里插入图片描述
这种方法确实可以提高性能,但是内存大小有限,如果用户的数量越来越多,内存一旦溢出,可能会造成服务器的奔溃,所以我们可以考虑在内存的哈希表内删除一些不常用的用户信息

LRU 算法的思想是:长期不被使用的数据,在未来被用到的几率也不大,因此当占用内存达到一个阀值时,就删除不常使用的数据

如何实现 LRU 算法

数据结构:哈希链表

在哈希链表中,key 和 value 具有固定的排列顺序,就像双向链表一样,每一个键值对都有一个前驱,一个后驱.

如果访问一个数据,首先查看哈希链表中是否存在,如果存在则把它删除,然后添加到哈希链表的尾部,如果要查找的元素不存在哈希链表中,则进行数据库的查询,然后添加到哈希链表的尾部,这样一来,最近最少使用的数据就在哈希链表的头部了,然后就可以直接删除了。

代码实现

class LRUCache {
   
public:
    LRUCache(int capacity) {
   
        cap = capacity;
    }
    
    int get(int key) {
   
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的温柔香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值