当前位置:首页 > 公众号精选 > 架构师社区
[导读]往往开始做一个项目时,不会过多的考虑性能问题,以快速迭代功能为主。后续随着业务的快速发展,系统运行的性能越来越慢,此时就需要对系统进行相应的优化,而效果最显著的就是给系统加上缓存。那么问题来了,当你为系统加上缓存时,有没有考虑过使用缓存需要注意哪些事项呢?


写在前面

往往开始做一个项目时,不会过多的考虑性能问题,以快速迭代功能为主。后续随着业务的快速发展,系统运行的性能越来越慢,此时,就需要对系统进行相应的优化,而效果最显著的就是给系统加上缓存。那么,问题来了,当你为系统加上缓存时,有没有考虑过使用缓存需要注意哪些事项呢?

缓存命中率

缓存命中率是从缓存中读取数据的次数与总读取次数的比率,命中率越高越好。缓存命中率=从缓存中读取次数 / (总读取次数 (从缓存中读取次数 + 从慢速设备上读取次数))。这是一个非常重要的监控指标,如果做缓存,则应通过监控这个指标来看缓存是否工作良好。

缓存类型

缓存类型总体上来看,可以分为:堆缓存、堆外缓存、磁盘缓存和分布式缓存。

面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?

堆内存

使用Java堆内存来存储对象。使用堆缓存的好处是没有序列化/反序列化,是最快的缓存。缺点也很明显,当缓存的数据量很大时,GC(垃圾回收)暂停时间会变长,存储容量受限于堆空间大小。一般通过软引用/弱引用来存储缓存对象。即当堆内存不足时,可以强制回收这部分内存释放堆内存空间。一般使用堆缓存存储较热的数据。可以使用Guava Cache、Ehcache 3.x、 MapDB实现。

堆外内存

即缓存数据存储在堆外内存,可以减少GC暂停时间(堆对象转移到堆外,GC扫描和移动的对象变少了),可以支持更多的缓存空间(只受机器内存大小限制,不受堆空间的影响)。但是,读取数据时需要序列化/反序列化。因此,会比堆缓存慢很多。可以使用Ehcache 3.x、 MapDB实现。

磁盘缓存

即缓存数据存储在磁盘上,在JVM重启时数据还存在,而堆/堆外缓存数据会丢失,需要重新加载。可以使用Ehcache 3.x、MapDB实现。

分布式缓存

分布式缓存可以使用ehcache-clustered(配合Terracotta server)实现Java进程间分布式缓存。也可以使用Memcached、Redis实现。

使用分布式缓存时,有两种模式如下:

  • 单机模式:存储最热的数据到堆缓存,相对热的数据到堆外缓存,不热的数据到磁盘缓存。
  • 集群模式:存储最热的数据到堆缓存,相对热的数据到对外缓存,全量数据到分布式缓存。

缓存回收策略

缓存的回收策略总体上来说包含:基于空间的回收策略、基于容量(空间)的回收策略、基于时间的回收策略和基于对象引用的回收策略。面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?

基于空间

基于空间指缓存设置了存储空间,如设置为10MB,当达到存储空间上限时,按照一定的策略移除数据。

基于容量

基于容量指缓存设置了最大大小,当缓存的条目超过最大大小时,按照一定的策略移除旧数据。

基于时间

TTL(Time To Live):存活期,即缓存数据从创建开始直到到期的一个时间段(不管在这个时间段内有没有被访问,缓存数据都将过期)。TTI(Time To Idle):空闲期,即缓存数据多久没被访问后移除缓存的时间。

基于对象引用

软引用:如果一个对象是软引用,则当JVM堆内存不足时,垃圾回收器可以回收这些对象。软引用适合用来做缓存,从而当JVM堆内存不足时,可以回收这些对象腾出一些空间供强引用对象使用,从而避免OOM。弱引用:当垃圾回收器回收内存时,如果发现弱引用,则将它立即回收。相对于软引用,弱引用有更短的生命周期。

注意:只有在没有其他强引用对象引用弱引用/软引用对象时,垃圾回收时才回收该引用。即如果有一个对象(不是弱引用/软引用对象)引用了弱引用/软引用对象,那么垃圾回收时不会回收该弱引用/软引用对象。

回收算法

使用基于空间和基于容量的缓存会使用一定的策略移除旧数据,通常包含:FIFO算法、LRU算法和LFU算法。面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?

  • FIFO(First In First Out):先进先出算法,即先放入缓存的先被移除。
  • LRU(Least Recently Used):最近最少使用算法,时间时间距离现在最久的那个被移除。
  • LFU(Least Frequently Used):最不常用算法,一定时间段内使用次数(频率)最少的那个被移除。

实际应用中基于LRU的缓存居多。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭