前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你用LinkedHashMap打造FIFO和LRU缓存系统

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

作者头像
业余草
发布2019-04-25 09:25:54
6710
发布2019-04-25 09:25:54
举报
文章被收录于专栏:业余草

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

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

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

测试结果截图如下所示:

640
640

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

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

640
640

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年04月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档