赖以生存的算法:缓存

缓存,从兜里的手机,到家里的厨房,再到我们的大脑,无处不在。了解缓存,不仅能让你成为一个更好的程序员,更能让你在生活中成为一个利用空间的能手。不出意外的话,还能帮你理解处在风口浪尖上的“新零售”的概念。

什么是缓存

我保证,你不听我的解释,就可自己找到答案,你只需要在厨房里转一圈。如果你现在进不了厨房,就可在脑子里设想一下,请不要错过这个主动学习的机会。

我找到的缓存,是冰箱。它缓的是离我家十公里外的一个中国超市(巴黎一共没几家中国超市,所以离的远很正常)。当我想喝一瓶青岛啤酒的时候,我就想它在冰箱里冷冷的等着我,不用想喝的时候,还得开车到十公里以外的超市里去买。

所以缓存是什么?缓存是一块存储空间,能把东西从很远的地方存到里消费者更进的地方。冰箱是超市的缓存,家里的书桌是图书馆的缓存(如果你借书的话)。CPU旁边有内存的缓存。

缓存满了怎么办

世界杯的夏天,你会买上一箱啤酒,放到冰箱里,可发现冰箱满了。这时候你要给啤酒腾地方。你会选择消灭什么?这个问题我专门请教了我老婆,她选择那些快过期的东西。经济的角度上,可以解释,这些东西快过期了,再不吃就可能扔了。问题和答案都非常简单,却反映了缓存里最重要的问题:缓存的置换算法。

大家仔细想一下,冰箱里为什么会出现快过期的东西呢?因为这些东西,你不常用。不常用的东西,为什么要放冰箱里呢?请注意,这里是你成为生活中利用空间能手的机会。不常用的东西,就不要缓,万一缓上了,也要优先置换掉。离你近的缓存都是非常昂贵的,除了你家的冰箱,还有你家的储物间,房价那么贵,如果你缓了一个占地一平方米的东西,还不常用,那我劝你,算算它值不值你那一平方米的房价。

不缓,那需要的时候怎么办?直接去超市买吧。设想如果超市就开在你家楼下,你打个电话两分钟就能送上来,这时候你还需要冰箱吗?罗振宇在刚过去的跨年演讲里说道,现在还没有多少人能把新零售讲明白,我觉得不妨从缓存的角度一试。

这里打个岔,如果你是一名程序员,你一定要知道LRU(least recent used)的算法,因为它在缓存置换里扮演着非常重要的角色,如果你还是一个Java程序员,你一定要知道LinkedHashMap是怎么实现的,因为那里有你需要的LRU。

缓存的大小

大家有没有注意到,越是近的缓存,它就越小(比如CPU里的一二三级缓存)。有些人认为这是造价的问题,但比造价更重要的,是查找速度。试想一下,如果把你家的冰箱,变成了一个大冰库,你从里面拿出一个鸡蛋的时间必定要更长。

一旦明白了东西越大,查找所需时间就越长的道理,我们就不难明白,为什么人越老越容易记不起来事情。人老了,并不是大脑转不动了,而是随着阅历的增加,人脑里存放的东西变多了。一个十几岁的初中生,记一个东西,只需要在十年的东西里找个缝,七十多的老爷爷,要在七十年的光阴中找个缝,你说谁快谁慢。

结语

你能忘记什么,和你能记住什么一样重要。

王辉 wechat
订阅热情洋溢的程序员的故事