分布式缓存技术选型
前言:
这是我的架构设计学习专栏的第2篇文章,此专栏用于存放我的架构设计学习笔记,内容一部分源于网上免费资料,一部分源于gpt和我自己的理解。专栏目前免费,欢迎订阅此专栏和关注我,随着专栏内容的增多,我可能会收费,所以建议喜欢本专栏的盆友尽早订阅。
这是我的架构设计专栏地址:https://www.nowcoder.com/creation/manager/columnDetail/0ybvLm
我还有另外一个八股专栏,感兴趣的也可以订阅一下:https://www.nowcoder.com/creation/manager/columnDetail/j8ZZk0
分布式缓存技术选型
1.缓存有什么用
缓存主要是用来解决高性能问题,通过减轻数据库的负载和提高系统响应速度来应对大量请求,同时也间接提升系统的可用性。在分布式系统中,缓存作为提高系统性能的关键技术,能够显著降低数据库负载、减少网络延迟、提高数据访问速度。当面对大量并发请求时,如果每次都直接从数据库读取数据,可能会导致数据库压力过大,甚至引发性能瓶颈。此时,引入缓存可以有效地缓解这一问题。因此,合理设计分布式缓存策略对于提升系统整体性能具有重要意义。
在分布式缓存系统的架构设计中,我们需要关注以下几个方面:缓存节点的部署和拓扑结构、缓存数据的分布和同步策略、缓存淘汰算法以及缓存失效机制等。同时,分布式缓存系统也带来了一系列挑战,如数据一致性问题、缓存失效问题等。因此,设计一个合理且高效的分布式缓存策略就显得尤为重要。
2. 缓存技术选型
缓存技术选型包括本地缓存和分布式缓存两大类,常用的本地缓存技术有ConcurrentHashMap、Guava Cache等;分布式缓存技术则以Redis和Memcached为代表。
0.对比本地缓存和分布式缓存
1.本地缓存
本地缓存的概念:
本地缓存是指和应用程序在同一个进程内的内存空间去存储数据,数据的读写都是在同一个进程内完成的。
本地缓存优点:
读取速度快,但是不能进行大数据量存储。
本地缓存不需要远程网络请求去操作内存空间,没有额外的性能消耗,所以读取速度快。但是由于本地缓存占用了应用进程的内存空间,比如java进程的jvm内存空间,故不能进行大数据量存储。
本地缓存缺点:
● 应用程序集群部署时,会存在数据更新问题(数据更新不一致)
本地缓存一般只能被同一个应用进程的程序访问,不能被其他应用程序进程访问。在单体应用集群部署(是一种将同一个单体应用的多个实例部署到不同服务器上,以实现负载均衡和高可用性的方法)时,如果数据库有数据需要更新,就要同步更新不同服务器节点上的本地缓存的数据来保证数据的一致性,但是这种操作的复杂度高,容易出错。可以基于redis的发布/订阅机制来实现各个部署节点的数据同步更新。
● 数据会随着应用程序的重启而丢失
因为本地缓存的数据是存储在应用进程的内存空间的,所以当应用进程重启时,本地缓存的数据会丢失。
使用场景:
1. 单应用系统:对于单个应用系统,可以使用本地缓存来提高性能。
2. 小规模数据:当数据量较小,且不需要跨机器访问时,可以使用本地缓存。
2. 分布式缓存
分布式缓存概念:
分布式缓存是独立部署的服务进程,并且和应用程序没有部署在同一台服务器上。所以是需要通过远程网络请求来完成分布式缓存的读写操作,并且分布式缓存主要应用在应用程序集群部署的环境下。
分布式缓存优点:
● 支持大数据量存储
分布式缓存是独立部署的进程,拥有自身独自的内存空间,不需要占用应用程序进程的内存空间,并且还支持横向扩展的集群方式部署,所
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏价格永远为19.9元! 不想当架构师的后端开发工程师不是好码农! 此专栏一方面用于存放我的架构设计学习笔记, 另外我会在本专栏加入一系列最常问八股问题帖子,内容就是我根据自己的面试经历和网上的面经,去筛选八股里面哪些是最常被问到的问题把它们整理出来,大家可以在面试前一两个小时快速把这一系列最常问八股的帖子拿出来看看,临时抱佛脚的效果应该很好