
文章插图
大家好,我是哪吒 。
我第一次接触缓存的时候,是用map做的,当时做一个实时数据同步的功能 。
需求看似简单,一取一传
- 当时是通过websocket获取服务端数据 。
- 然后根据数据类别,将数据缓存到本地map中 。
- 做了一个定时任务,通过ftp上传给第三方服务器 。
- 现场网络很不稳定,FTP时好时坏 。
- 做的是一个安全问题的实时监控系统,第三方数据要求还很严格,必须100%准确 。
起初,是通过重启的方式解决的,哈哈,重启解决一切烦恼 。
- 添加一个心跳功能,实时监控FTP服务的状态 。
- 如果断了7秒以上,就采取报警功能,我记得设置的是火警的音乐,提示现场人员排查FTP网络 。
- 如果断了1分钟以上,就将软件自动重启 。
到后来,才发现,当时做的真的是稀烂,本地缓存应该具有很多功能,当时这些,压根就没有 。
- 超过最大限制有对应淘汰策略如LRU、LFU 。
- 过期时间淘汰如定时、懒式、定期 。
- 持久化 。
- 统计监控 。
一、缓存缓存就是把访问量较高的热点数据从传统的关系型数据库中加载到内存中,当用户再次访问热点数据时,是从内存中加载,减少了对数据库的访问量,解决了高并发场景下容易造成数据库宕机的问题 。
缓存有哪些分类:
- 操作系统磁盘缓存,减少磁盘机械操作 。
- 数据库缓存,减少文件系统 I/O 。
- 应用程序缓存,减少对数据库的查询 。
- Web 服务器缓存,减少应用程序服务器请求 。
- 客户端浏览器缓存,减少对网站的访问 。
二、分析一下本地缓存的优势数据缓存带来了诸多优势,其中两个核心优点是:
- 降低数据库压力:通过将常用的数据存储在快速访问的内存中,缓存有效地减轻了对后端数据库的压力 。这意味着数据库可以更专注地处理复杂的查询和更新操作,而不必频繁地处理重复的读取请求 。
- 提高响应速度:将数据存储在缓存中,使得系统能够更迅速地响应用户的请求 。相比每次都从数据库中获取数据,缓存可以在毫秒级别内提供所需信息,从而极大地改善用户体验 。

文章插图
三、本地缓存解决方案?上面介绍了ConcurrentHashMap,这里不再赘述 。
1、基于Guava Cache实现本地缓存Guava是google团队开源的一款 JAVA 核心增强库,包含集合、并发、缓存、IO、反射等工具箱性能和稳定性上都有保障应用十分广泛 。
Guava Cache支持很多特性:
- 支持最大容量限制 。
- 支持两种过期删除策略插入时间和访问时间 。
- 支持简单的统计功能 。
- 基于LRU算法实现 。
不同的是Caffeine采用了一种结合LRU、LFU优点的算法W-TinyLFU在性能上有明显的优越性 。
推荐阅读
- 抖音取名5大方法,辨识度、流量都有了
- 八个针对高级职位的高级 JavaScript 面试题
- 梦见到处都是水有什么征兆 梦见到处都有水在流是怎么回事
- 张学友:“千万不要跟刘嘉玲打麻将,拍戏赚到的50万大部分都给了刘嘉玲!”
- 面试中的2个雷区:避免触碰这些小事
- 五大必备面试技巧:在职场竞争中脱颖而出
- 原形毕露!这次谁都救不了林心如,网友:狐狸尾巴终于露出来了
- 前任是何穗?纪焕博节目首提前任,感叹:我把车子和钱都留给了她
- 王志文、靳东都娶不到的她,最后为何会嫁给平平无奇的田小洁?
- 这房,塌的也太快了
