Redis系列之缓存原理&设计

可以缓存原生服务器的静态资源,比如样式、图片等。比如nginx反向代理

image.png

  • 边缘缓存

边缘缓存中典型的商业化服务就是CDN了。

CDN的全称是Content Delivery Network,即内容分发网络。

CDN通过部署在各地的边缘服务器,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度 和命中率。

CDN的关键技术主要有内容存储和分发技术。现在一般的公有云服务商都提供CDN服务。

image.png

服务端缓存

服务器端缓存是整个缓存体系的核心。包括数据库级缓存、平台级缓存和应用级缓存。

  • 数据库级缓存

  • 数据库是用来存储和管理数据的。

  • MySQL在Server层使用查询缓存机制。将查询后的数据缓存起来。

  • K-V结构,Key:select语句的hash值,Value:查询结果

  • InnoDB存储引擎中的buffer-pool用于缓存InnoDB索引及数据块

  • 平台级缓存

平台级缓存指的是带有缓存特性的应用框架。 比如:GuavaCache 、EhCache、OSCache等。 部署在应用服务器上,也称为服务器本地缓存。

  • 应用级缓存

具有缓存功能的中间件:Redis、Memcached、EVCache、Tair等。 采用K-V形式存储。

利用集群支持高可用、高性能、高并发、高扩展。

缓存的优势、代价


优势

提升用户体验

  • 用户在使用产品过程中建立起来的一种纯主观感受。

  • 缓存的使用可以提升系统的响应能力,大大提升了用户体验。

减轻服务器压力

  • 客户端缓存、网络端缓存减轻应用服务器压力。

  • 服务端缓存减轻数据库服务器的压力。

提升系统性能

  • 缩短系统的响应时间

  • 减少网络传输时间和应用延迟时间

  • 提高系统的吞吐量

  • 增加系统的并发用户数

  • 提高了数据库资源的利用率

缺点和代价

额外的硬件支出

  • 缓存是一种软件系统中以空间换时间的技术

  • 需要额外的磁盘空间和内存空间来存储数据

  • 搭建缓存服务器集群需要额外的服务器

  • 采用云服务器的缓存服务就不用额外的服务器了

  • 阿里云,百度云,提供缓存服务

高并发缓存失效

  • 在高并发场景下会出现缓存失效(缓存穿透、缓存雪崩、缓存击穿)

  • 造成瞬间数据库访问量增大,甚至崩溃

缓存与数据库数据同步

  • 缓存与数据库无法做到数据的时时同步

  • Redis无法做到主从时时数据同步

缓存并发竞争

  • 多个redis的客户端同时对一个key进行set值得时候由于执行顺序引起的并发问题

缓存的读写模式


缓存一般有三种读写模式

Cache Aside Pattern(常用,旁路缓存)

Cache Aside Pattern,是最经典的缓存+数据库读写模式。

  • 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。

image.png

  • 更新的时候,先更新数据库,然后再删除缓存。

image.png

高并发脏读的三种情况

  • 1、先更新数据库,再更新缓存

image.png

update和commit之间,更新缓存,commit失败,则数据库数据与缓存数据不一致

  • 2、先删除缓存,再更新数据库

image.png

update和commit之间,有新的读,缓存为空,读数据库数据到缓存是旧的数据,commit后数据库数据为新的数据,则数据库数据与缓存数据不一致

  • 3、先更新数据库,再删除缓存(推荐)

image.png

Read/Write Through Pattern(直读直写穿透模式)

应用程序只操作缓存,缓存操作数据库。

Read-Through(穿透读模式/直读模式):应用程序读缓存,缓存没有,由缓存回源到数据库,并写入 缓存。

Write-Through(穿透写模式/直写模式):应用程序写缓存,缓存写数据库。

该种模式需要提供数据库的handler,开发较为复杂。

Write Behind Caching Pattern(异步缓存写入模式)

应用程序只更新缓存。

缓存通过异步的方式将数据批量或合并后更新到DB中不能时时同步,甚至会丢数据。

缓存架构的设计思路
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。

这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
pring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

[外链图片转存中…(img-o7IncSsK-1712058841103)]

[外链图片转存中…(img-rwBuEw5f-1712058841104)]

[外链图片转存中…(img-RCnh3isn-1712058841104)]

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值