专栏首页业余草手把手教你用LinkedHashMap打造FIFO和LRU缓存系统

手把手教你用LinkedHashMap打造FIFO和LRU缓存系统

对于缓存来说,我相信很多人都不会陌生。一般的,对于常用的一些数据,基础数据等,也或者是为了高并发,比如抢购等把热点数据放入缓存中以实现高并发快速响应。

说到缓存,Redis、memcached 等在面试中属于必问的知识点了。虽然这些专门的缓存系统做的很强大,看起来很复杂,但底层的原理其实很简单。今天我们一起来通过 LinkedHashMap 来打造两个 FIFO 和 LRU 机制的缓存系统。

FIFO 很好理解,就是 First In First Out,先入先出。就和队列一样,先进队列的先出队列。根据这个 FIFO 的这个特点,我们就可以通过 LinkedHashMap 来实现这种机制的缓存系统了。

上面几行代码就搞定了 FIFO 机制的缓存。测试代码也很简单,如下所示:

测试结果截图如下所示:

通过上面这个测试结果,可以看出,这个缓存系统并不完美。当我更新元素后,我想让它重新插入队列,相当于重新入队。因为它刚刚被更新过,说明使用频次可能更高一些。于是 LRU,这种缓存淘汰机制就应用而生了。

LRU 就是(Least Recently Used),最近最少使用,意思就是最近读取的数据放在最前面,最早读取的数据放在最后面,如果这个时候有新的数据进来,当缓存空间不够时,那么最后面存储的数据淘汰。实现代码如下所示:

下面我们来看看测试代码:

运行之后的效果截图如下所示:

关于缓存算法,还有 LFU 算法。这个代码较多,我后面单独来实现。关于本文的实现,其实还是非常基础的,比如关于线程安全问题,以及过期淘汰等问题可以根据自己的需要进行添加对应的功能。与代码相比,其实更重要的是编程思想,编程思路。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BAT 必问的 MySQL 面试题你都会吗?

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/detai...

    业余草
  • Redis缓存,持久化,高可用

    Redis 作为缓存服务器是众多企业中的选择之一,虽然该技术很成熟但也是存在一定的问题。就是缓存带来的缓存穿透,缓存击穿,缓存失效问题,继而引用分布式锁。

    业余草
  • 你意想不到的的编程问题

    以上两个位置1和2输出结果不相同,这是为什么呢? 详细解释见:http://www.evget.com/article/2015/11/19/23028.ht...

    业余草
  • 分布式系统关注点——先写DB还是「缓存」?

    在前一篇《360°全方位解读「缓存」》中,我们聊了运用缓存的三种思路,以及在一个完整的系统中可以设立缓存的几个位置,并且分享了关于浏览器缓存、CDN缓存、网关(...

    Zachary_ZF
  • 架构设计 | 缓存管理模式,监控和内存回收策略

    在业务系统中,查询时最容易出现性能问题的模块,查询面对的数据量大,筛选条件复杂,所以在系统架构中引入缓存层,则是非常必要的,用来缓存热点数据,达到快速响应的目的...

    知了一笑
  • 图解 HTTP 缓存

    HTTP 的缓存机制,可以说这是前端工程师需要掌握的重要知识点之一。本文将针对 HTTP 缓存整体的流程做一个详细的讲解,争取做到大家读完整篇文章后,对缓存有一...

    政采云前端团队
  • 前端缓存之HTTP缓存

    说真的,当自己还很小白的时候,明明修改了JS的内容了,但是就是没有加载成功,那时候感觉好神奇,好没道理。后来知道了这是因为缓存的原因。

    wade
  • 深入理解浏览器的缓存机制

    缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负...

    前端森林
  • 啊哈!缓存

    缓存在分布式系统中应用广泛,如何在架构设计中使用缓存来优化业务一直都是一个重要的话题。本文主要对引入缓存需要解决的问题以及一些优秀的实践,让读者对缓存有一个比较...

    孟君
  • 听说,加缓存能提高性能?

    关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术

    ayqy贾杰

扫码关注云+社区

领取腾讯云代金券