本篇内容主要讲解“Java缓存架构设计常见问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java缓存架构设计常见问题有哪些”吧!
1 分层缓存架构设计
2 缓存带来的复杂度问题
常见的问题主要包括
数据一致性
缓存穿透
缓存雪崩
缓存高可用
缓存热点 下面逐一介绍分析这些问题以及相应的解决方案。
数据一致性
因为缓存属于持久化数据的一个副本,因此不可避免的会出现数据不一致问题。导致脏读或读不到数据的情况。数据不一致,一般是因为网络不稳定或节点故障导致
问题出现的常见3个场景以及解决方案:
缓存穿透
缓存一般是Key,value方式存在,当某一个Key不存在时会查询数据库,假如这个Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。
主要解决方案:
对结果为空的数据也进行缓存,当此key有数据后,清理缓存
一定不存在的key,采用布隆过滤器,建立一个大的Bitmap中,查询时通过该bitmap过滤
缓存雪崩
缓存高可用
缓存是否高可用,需要根据实际的场景而定,并不是所有业务都要求缓存高可用,需要结合具体业务,具体情况进行方案设计,例如临界点是是否对后端的数据库造成影响。
主要解决方案:
分布式:实现数据的海量缓存
复制:实现缓存数据节点的高可用
缓存热点
一些特别热点的数据,高并发访问同一份缓存数据,导致缓存服务器压力过大。
解决:复制多份缓存副本,把请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力
3 业界案例
案例主要参考新浪微博陈波的技术分享
技术挑战
Feed缓存架构图
架构特点
新浪微博把SSD应用在分布式缓存场景中,将传统的Redis/MC + Mysql方式,扩展为 Redis/MC + SSD Cache + Mysql方式,SSD Cache作为L2缓存使用,第一降低了MC/Redis成本过高,容量小的问题,也解决了穿透DB带来的数据库访问压力
迎工作一到五年的Java工程师朋友们加入Java架构开发:860113481
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
主要在数据架构、性能、储存成本、服务化等不同方面进行了优化增强
到此,相信大家对“Java缓存架构设计常见问题有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!