缓存基础----本地缓存、分布式缓存以及多级缓存
目录
一、缓存的概念(什么是缓存)
二、为什么要用缓存(为什么要用redis作为缓存)
三、缓存的分类有哪些
1、本地缓存
2、分布式缓存
3、多级缓存
像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景,很容易造成关系型数据库的瘫痪,随着缓存技术的出现很好的解决了这个问题。
一、缓存的概念(什么是缓存)
缓存就是把访问量较高的热点数据从传统的关系型数据库中加载到内存中,当用户再次访问热点数据时是从内存中加载,减少了对数据库的访问量,解决了高并发场景下容易造成数据库宕机的问题。
二、为什么要用缓存(为什么要用redis作为缓存)
针对于这个问题要从两个方面去考虑,一个是应用系统的高并发场景,另一个就是应用系统的高性能情况。
1、高性能情况:用户第一次访问数据时,缓存中没有数据,要从数据库中获取数据,因为是从磁盘中拿数据,读取数据的过程比较慢。拿到数据后将数据存储在缓存中,用户第二次访问数据时,可以从缓存中直接获取,因为缓存是直接操作内存的,访问数据速度比较快。
2、高并发场景下:操作缓存能够承受的并发访问量是远远大于访问数据库的,比如redis,它的读的速度是110000次/s,写的速度是81000次/s。所以说将数据库中访问量高的数据存储到缓存中,用户请求的时候直接访问数据库,不必访问数据库,提高应用程序的并发量。
三、缓存的分类有哪些
缓存基本上分为三类:本地缓存、分布式缓存、多级缓存。根据缓存和应用程序是否属于同一个进程,将缓存分为本地缓存和分布式缓存。基于本地缓存和分布式缓存都有各自的优点和缺点,后面又出现了多级缓存的概念。
1、本地缓存
本地缓存的概念:本地缓存是指和应用程序在同一个进程内的内存空间去存储数据,数据的读写都是在同一个进程内完成的。
本地缓存优点:读取速度快,但是不能进行大数据量存储。
本地缓存不需要远程网络请求去操作内存空间,没有额外的性能消耗,所以读取速度快。但是由于本地缓存占用了应用进程的内存空间,比如java进程的jvm内存空间,故不能进行大数据量存储。
本地缓存缺点:
(1)、应用程序集群部署时,会存在数据更新问题(数据更新不一致)
本地缓存一般只能被同一个应用进程的程序访问,不能被其他应用程序进程访问。在单体应用集群部署时,如果数据库有数据需要更新,就要同步更新不同服务器节点上的本地缓存的数据来保证数据的一致性,但是这种操作的复杂度高,容易出错。可以基于redis的发布/订阅机制来实现各个部署节点的数据同步更新。
(2)、数据会随着应用程序的重启而丢失
因为本地缓存的数据是存储在应用进程的内存空间的,所以当应用进程重启时,本地缓存的数据会丢失。
本地缓存的实现:
(1)、缓存存储的数据一般都是key-value键值对的数据结构,在java语言中,常用的字典实现包括 HashMap 和 ConcurretHashMap。
(2)、除了上面说的实现方式以外,也可以用Guava、Ehcache以及Caffeine等封装好的工具包来实现本地缓存。
2、分布式缓存
分布式缓存概念:分布式缓存是独立部署的服务进程,并且和应用程序没有部署在同一台服务器上。所以是需要通过远程网络请求来完成分布式缓存的读写操作,并且分布式缓存主要应用在应用程序集群部署的环境下。
分布式缓存优点:
(1)、支持大数据量存储
分布式缓存是独立部署的进程,拥有自身独自的内存空间,不需要占用应用程序进程的内存空间,并且还支持横向扩展的集群方式部署,所以可以进行大数据量存储。
(2)、数据不会随着应用程序重启而丢失
分布式缓存和本地缓存不同,拥有自身独立的内存空间,不会受到应用程序进程重启的影响,在应用程序重启时,分布式缓存的存储数据仍然存在。
(3)、数据集中存储,保证数据的一致性
当应用程序采用集群方式部署时,集群的每个部署节点都有一个统一的分布式缓存进行数据的读写操作,所以不会存在像本地缓存中数据更新问题,保证了不同服务器节点的 数据一致性。
(4)、数据读写分离,高性能,高可用
分布式缓存一般支持数据副本机制,实现读写分离,可以解决高并发场景中的数据读写性能问题。而且在多个缓存节点冗余存储数据,提高了缓存数据的可用性,避免某个缓存节点宕机导致数据不可用问题。
分布式缓存缺点:
(1)、数据跨网络传输,读写性能不如本地缓存
分布式缓存是一个独立的服务进程,并且和应用程序进程不在同一台机器上,所以数据的读写要通过远程网络请求,这样相对于本地缓存的数据读写,性能要低一些。
分布式缓存的实现:
分布式缓存的典型实现包括 MemCached 和 Redis。
3、多级缓存
基于本地缓存和分布式缓存的优缺点,多级缓存应运而生,在实际的业务开发中一般也是采用多级缓存。注意:本地缓存一般存储更新频率低,访问频率高数据,分布式缓存一般存储更新频率很高的数据。
多级缓存的请求流程:本地缓存作为一级缓存,分布式缓存作为二级缓存;当用户获取数据时,先从一级缓存中获取数据,如果一级缓存有数据则返回数据,否则从二级缓存中获取数据。如果二级缓存中有数据则更新一级缓存,然后将数据返回客户端。如果二级缓存没有数据则去数据库查询数据,然后更新二级缓存,接着再更新一级缓存,最后将数据返回给客户端。
多级缓存的实现:可以使用Guava或者Caffeine作为一级缓存,Redis作为二级缓存。
注意:在应用程序集群部署时,如果数据库的数据有更新的情况,一级缓存的数据更新容易出现数据不一致的情况。因为是集群部署,多个部署节点实现一级缓存数据更新难度比较大,不过我们可以通过Redis的消息发布/订阅机制来实现多个节点缓存数据一致性问题。
缓存基础----本地缓存、分布式缓存以及多级缓存相关推荐
- 设计高并发架构与系统多级缓存架构如何设计?
高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己 ...
- 千万级并发!如何设计一个多级缓存系统?
作者:不清不慎,目前在杭州蘑菇街公司任职,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人! 首先我们需要明白,什么是一个多级缓存系统,它有什么用.所谓多级缓存系统,就是指在一个系统 ...
- fifo页面置换算法设计思路_千万级并发!如何设计一个多级缓存系统?
什么是一个多级缓存系统?它有什么用?我们又如何设计一个多级缓存系统? 图片来自 Pexels 所谓多级缓存系统,就是指在一个系统的不同的架构层级进行数据缓存,以提升访问效率. 我们都知道,一个缓存系统 ...
- 多级缓存设计详解 | 给数据库减负,刻不容缓!
关注我们获得更多内容 作 者 简 介 王梓晨 物流研发部架构师,GIS 技术部负责人,2012 年加入京东,多年一线团队大促备战经验,负责物流研发一些部门的架构工作,专注于低延迟系统设计与海量数据处理 ...
- HM-SpringCloud微服务系列11.1【多级缓存的意义JVM进程缓存】
HM-SpringCloud微服务系列11:多级缓存-高级篇 1. 什么是多级缓存 多级缓存是亿级流量的缓存方案 浏览器访问静态资源时,优先读取浏览器本地缓存 访问非静态资源(ajax查询数据)时,访 ...
- Redis高级篇-多级缓存
Redis高级篇资料下载 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat ...
- 京东java多级缓存_京东技术:多级缓存设计详解 | 给数据库减负
来这里找志同道合的小伙伴! 作 者 简 介 王梓晨 自古兵家多谋,<谋攻篇>,"故上兵伐谋,其次伐交,其次伐兵,其下攻城.攻城之法,为不得已",可见攻城之计有很多种,而 ...
- 京东java多级缓存_多级缓存设计详解 | 给数据库减负,刻不容缓!
来这里找志同道合的小伙伴! 作 者 简 介 王梓晨 自古兵家多谋,<谋攻篇>,"故上兵伐谋,其次伐交,其次伐兵,其下攻城.攻城之法,为不得已",可见攻城之计有很多种,而 ...
- raid配置ssd为缓存_一种基于SSDRAID阵列的多级缓存及缓存方法与流程
本发明属于固态硬盘存储技术领域,更具体地,涉及一种基于SSD RAID阵列的多级缓存及缓存方法. 背景技术: 基于闪存的固态磁盘(Solid State Drives,SSD)以其优异的性能.非异失和 ...
最新文章
- (组合)Binomial Showdown
- mysql事务在提交后才发送给数据库执行_从一个线上问题分析binlog与内部XA事务提交过程...
- 使用Spring Cloud Function框架进行面向函数的编程
- mysql concat ws 效率,MySQL concat_ws()方法的用法
- Flink异步io应用场景之流表join维表
- 使用sqlserver日期函数获取当前日期
- 工作57:element格式化内容
- linux内核打开文件数,放开Linux内核对用户进程可打开文件数和TCP连接的限制
- 常见25种深度学习模型的github代码
- 猪八戒网的DevOps进化论
- 牛客网模拟笔试——黑化的牛牛(JavaScript)
- 英美安全机构称俄罗斯正在暴力攻击全球数百家组织机构
- Java前端Rsa公钥加密,后端Rsa私钥解密(支持字符和中文)
- Ubuntu环境下安装QT5
- ORACLE中dual的详解及其故障恢复
- 基于Processing和Leap Motion的绘画系统
- 【人工智能项目】Fashion Mnist识别实验
- fuk ,我们被打包卖了
- 1860-zbj的电梯间
- 引用Bootstrap无法显示样式,可能是安装的版本和参考的文档不相符