漫画:什么是LRU算法?

栏目: 编程工具 · 发布时间: 7年前

内容简介:第一时间关注程序猿(媛)身边的故事述者

点击上方“ 程序人生 ”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事

漫画:什么是LRU算法?

述者

小灰

已获原作者授权,如需转载,请联系原作者。

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

—————  两个月前  —————

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

用户信息当然是存在数据库里。但是由于我们对用户系统的性能要求比较高,显然不能每一次请求都去查询数据库。

所以,小灰在内存中创建了一个哈希表作为缓存,每次查找一个用户的时候先在哈希表中查询,以此提高访问性能。

漫画:什么是LRU算法?

很快,用户系统上线了,小灰美美地休息了几天。

一个多月之后......

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

———————————————

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

什么是哈希链表呢?

我们都知道,哈希表是由若干个Key-Value所组成。在“逻辑”上,这些Key-Value是无所谓排列顺序的,谁先谁后都一样。

漫画:什么是LRU算法?

在哈希链表当中,这些Key-Value不再是彼此无关的存在,而是被一个链条串了起来。每一个Key-Value都具有它的前驱Key-Value、后继Key-Value,就像双向链表中的节点一样。

漫画:什么是LRU算法?

这样一来,原本无序的哈希表拥有了固定的排列顺序。

漫画:什么是LRU算法?

漫画:什么是LRU算法?

让我们以用户信息的需求为例,来演示一下LRU算法的基本思路:

1.假设我们使用哈希链表来缓存用户信息,目前缓存了4个用户,这4个用户是按照时间顺序依次从链表右端插入的。

漫画:什么是LRU算法?

2.此时,业务方访问用户5,由于哈希链表中没有用户5的数据,我们从数据库中读取出来,插入到缓存当中。 这时候,链表中最右端是最新访问到的用户5,最左端是最近最少访问的用户1。

漫画:什么是LRU算法?

3.接下来,业务方访问用户2,哈希链表中存在用户2的数据,我们怎么做呢?我们把用户2从它的前驱节点和后继节点之间移除,重新插入到链表最右端。这时候,链表中最右端变成了最新访问到的用户2,最左端仍然是最近最少访问的用户1。

漫画:什么是LRU算法?

漫画:什么是LRU算法?

4.接下来,业务方请求修改用户4的信息。同样道理,我们把用户4从原来的位置移动到链表最右侧,并把用户信息的值更新。 这时候,链表中最右端是最新访问到的用户4,最左端仍然是最近最少访问的用户1。

漫画:什么是LRU算法?

漫画:什么是LRU算法?

5.后来业务方换口味了,访问用户6, 用户6在缓存里没有,需要插入到哈希链表。假设这时候缓存容量已经达到上限,必须先删除最近最少访问的数据,那么位于哈希链表最左端的用户1就会被删除掉,然后再把用户6插入到最右端。

漫画:什么是LRU算法?

漫画:什么是LRU算法?

以上,就是LRU算法的基本思路。

漫画:什么是LRU算法?

漫画:什么是LRU算法?

需要注意的是,这段不是线程安全的,要想做到线程安全,需要加上synchronized修饰符。

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

漫画:什么是LRU算法?

- The End -

「若你有原创文章想与大家分享,欢迎投稿。」

加编辑微信ID,备注#投稿#:

程序 丨 druidlost  

小七 丨 duoshangshuang

点文末 阅读全文 ,看『程序人生』其他精彩文章推荐。

推荐阅读:

漫画:什么是LRU算法?

print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Probabilistic Method Second Edition

The Probabilistic Method Second Edition

Noga Alon、Joel H. Spencer / Wiley-Blackwell / 2000 / $121.95

The leading reference on probabilistic methods in combinatorics-now expanded and updated When it was first published in 1991, The Probabilistic Method became instantly the standard reference on one......一起来看看 《The Probabilistic Method Second Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具