代做网站的公司有哪些,wordpress博客转换小程序,做三合一网站的好处,深入解析wordpress二手什么是缓存#xff1f;
举个例子#xff0c;去图书馆查资料#xff0c;一般情况下我们会集中把我们有可能查阅的几本书从书架取下来#xff0c;放在我们的桌面上#xff0c;以便交叉查阅#xff0c;从而避免频繁的从座位上跑到书架旁去取书。在这个例子里#xff0c;书…什么是缓存
举个例子去图书馆查资料一般情况下我们会集中把我们有可能查阅的几本书从书架取下来放在我们的桌面上以便交叉查阅从而避免频繁的从座位上跑到书架旁去取书。在这个例子里书桌所扮演的就是缓存的角色。
缓存有两个特点
能在某种程度上降低访问数据的成本其容量远小于外部存储的容量如本例子中书桌上能容纳的书本数就远小于书架的。
什么是 LRU 缓存?
LRULeast Recently Used 缓存是一种以 LRU 策略为缓存策略的缓存。而所谓的缓存策略就是当缓存满了之后又有新数据需要加入到缓存中时我们怎么从缓存中删除旧数据为新数据腾出空间的策略。
依旧以图书馆为例假设我们的书桌上只能容纳 3 本书并且已经放了 3 本书在上面此时我们需要查阅第 4 本书那么我们就必须权衡将原先书桌上的 3 本书的中的哪一本放回书架去。这个权衡的过程就是所谓的缓存策略。
LRULeast Recently Used 的简写即近期最少使用算法。该算法依据于程序的局部性原理 其淘汰旧数据的策略是距离当前最久没有被访问过的数据应该被淘汰。
基于双链表 的LRU实现:
传统意义的LRU算法是为每一个Cache对象设置一个计数器每次Cache命中则给计数器1而Cache用完需要淘汰旧内容放置新内容时就查看所有的计数器并将最少使用的内容替换掉。
它的弊端很明显如果Cache的数量少问题不会很大 但是如果Cache的空间过大达到10W或者100W以上一旦需要淘汰则需要遍历所有计算器其性能与资源消耗是巨大的。效率也就非常的慢了。
它的原理 将Cache的所有位置都用双连表连接起来当一个位置被命中之后就将通过调整链表的指向将该位置调整到链表头的位置新加入的Cache直接加到链表头中。
这样在多次进行Cache操作后最近被命中的就会被向链表头方向移动而没有命中的而想链表后面移动链表尾则表示最近最少使用的Cache。
当需要替换内容时候链表的最后位置就是最少被命中的位置我们只需要淘汰链表最后的部分即可。
上面说了这么多的理论 下面用代码来实现一个LRU策略的缓存。 我们用一个对象来表示Cache并实现双链表。
这个问题在面试被问了然后说了一句这个我不会回来查阅一下大致了解一下。