本文分享自华为云社区《【高并发】缓存最关心的问题是什么?有哪些类型?回收策略和算法?》,作者:冰 河 。

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

缓存命中率

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

缓存类型

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

堆内存

使用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的缓存居多。

点击关注,第一时间了解华为云新鲜技术~​

缓存最关心的问题是什么相关推荐

  1. 【高并发】面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?...

    写在前面 往往开始做一个项目时,不会过多的考虑性能问题,以快速迭代功能为主.后续随着业务的快速发展,系统运行的性能越来越慢,此时,就需要对系统进行相应的优化,而效果最显著的就是给系统加上缓存.那么,问 ...

  2. 架构专家高磊:缓存为王——无线缓存架构优化

    高磊 微软架构专家 读完需要 12 分钟 速读仅需 4 分钟 高磊,一线架构师,具有多年架构和研发经验:曾就职于阿里.华为等公司,专注于云计算.微服务体系等领域. 1 无线缓存的定义.限制条件及影响 ...

  3. 浏览器缓存——强缓存与协商缓存

    一.为什么要缓存 众所周知(在浏览器键入"全球网民数量",发起网络请求后知),全球网民数量已近50亿.身为网民的一份子,本人每天都有很多问题,亟待大佬给出答案.这不刚刚就有了个问题 ...

  4. 【专栏】基础篇02| Redis 旁路缓存的价值

    关注公众号 [离心计划]呀,一起逃离地球表面 专栏链接:Redis专栏https://link.juejin.cn/?target=https%3A%2F%2Fmp.weixin.qq.com%2Fm ...

  5. 高并发中的 限流、熔断、降级、预热、背压你都知道是什么意思吗?

    首先,我们需要明确一下这几个名词出现的场景:分布式高并发环境.如果你的产品卖相不好,没人鸟它,那它就用不着这几个属性.不需要任何加成,低并发系统就能工作的很好. 分布式系统是一个整体,调用关系错综复杂 ...

  6. @Cacheable使用详解

    1. 功能说明 @Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的.也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方 ...

  7. 关于springboot中Cacheable使用说明

    功能说明 @Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的.也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方法. ...

  8. 堪称神级的阿里巴巴“高并发”教程《基础+实战+源码+面试+架构》

    前言 作为一个普普通通的程序员,如何才能提升自己的能力,在职场上拥有一技之长,这也成为普通的你我,迫切的需求. 拥有什么样的能力才能不被淘汰?答案是:高并发,它几乎成为了每个程序员都想要拥有的经验. ...

  9. 「冰河技术」部分精华文章分类汇总,P8架构师都在看的技术文章!!

    这次,我将 [冰河技术] 微信公众号的文章整理出来了,很多细节的点,可能想得不是很完善,大家可以去[冰河技术]公众号获取或者在公众号内回复[冰河]加我[微信]提意见(别忘记点赞哟). 原创文章每周更新 ...

最新文章

  1. MaxCompute助力OSS支持EB级计算力
  2. Python中多层List展平为一层
  3. [JUC-5]ConcurrentHashMap源码分析JDK8
  4. python bottle学习(四)request.quest/query_string/params/body等方法介绍
  5. stn,spatial transformer network总结
  6. win10 mysql 远程连接_win10 docker部署mysql并启动远程连接
  7. php连接mysql 5.1.73_安装php环境(php5.4.44+mysql5.1.73+IIS)
  8. 用C++实现二分查找
  9. elcentro matlab,EL-Centro地震波积分计算与基线调整.docx
  10. 2017北理计算机考研复试线,北京理工大学2017年硕士研究生复试分数线
  11. 物维管理、楼控系统、安防系统、巡检管理、电子巡更、门禁管理、变配电、给排水、防盗报警、消防报警、电梯监视、智能楼宇、物业管理、报修管理、维保管理、工单管理、物料管理、审批、租赁管理、楼宇管理、房产管理
  12. 你还没听过 CynosDB 吗?不来这场数据库技术沙龙就要 OUT 了!
  13. Mac没有winnt格式_Mac磁盘到底要不要分区?
  14. 关于在dialog中重置form表单失败的问题
  15. Qt开发经验小技巧176-180
  16. 《非诚勿扰》原声大碟
  17. 一文看懂Lambda
  18. [清华集训2014]主旋律
  19. PMP证书容易考吗?
  20. heic(HEIF)格式图像处理(一)

热门文章

  1. vue-cil+vuex 构建一个简单的记事本应用
  2. jgGrid扩展 显示查询用时
  3. SpringBoot 实现Session共享
  4. Bootstrap 折叠插件
  5. 深度学习笔记(40) YOLO
  6. mysql5.6 replication_MySQL 5.6 Replication
  7. pop python3_python3 -- 堆(heapq)
  8. sqlquerystress
  9. synchronized(八)
  10. ReactNative-地图导航-iOS