1 什么是缓存?
缓存就是数据交换的缓冲区, 是存贮数据的临时区,一般读写性能较高 \textcolor{red}{是存贮数据的临时区,一般读写性能较高} 是存贮数据的临时区,一般读写性能较高。缓存可在多个场景下使用
以一次 w e b 请求为例,演示不同阶段的缓存作用 \textcolor{blue}{以一次web请求为例,演示不同阶段的缓存作用} 以一次web请求为例,演示不同阶段的缓存作用
- web开发时:浏览器发送请求时通常会缓存不经常变更静态文件,如css、js文件。浏览器缓存无需每次请求进行加载,降低网络延迟,提升响应速度
- 应用层缓存:请求到达Tomcat 服务器时,常用redis【具有优秀的读写能力,延迟在毫秒级别】作为缓存,可缓存经常从数据库中获得的数据。
- 数据库缓存:应用层缓存未命中时,请求到达数据库,任然可以针对数据库方面做缓存处理,SQL语句相同的查询结果会被缓存下来
- CPU、磁盘缓存:DB的操作需要进行磁盘的读写以及cpu 的计算,可使用CPU缓存以及磁盘缓存
2 Redis 缓存模型
由于redis是基于内存实现的数据库,数据的读写快,且可以将redis做为集群部署,意味着高可用。所以通常可用redis数据库作为应用程序的缓存区。其缓存模型如下
(1)请求从客户端发出,经由redis时,命中则直接缓存,
(2)请求从客户端发出,经由redis时,未命中缓存,需要经过数据库处理【低效】,获得数据后写入缓存
(3) 随着请求的不断发出,redis累计的缓存数据越来越多,请求直接命中redis缓存的几率增大,大大减少了数据库的低效操作。
R e d i s 缓存是把双刃剑 \textcolor{red}{Redis缓存是把双刃剑} Redis缓存是把双刃剑 ,尽管他能降低后端的负载、提升程式的性能。但是在 数据一致性成本变高 \textcolor{blue}{数据一致性成本变高} 数据一致性成本变高。且由于使用redis数据库,其运维成本变高。
3 Redis 缓存更新策略
为了使得缓存中的数据与DB中的数据保持一致,需要介绍redis缓存的更新策略
内存淘汰 | 超时剔除 | 主动更新 | |
---|---|---|---|
说明 | 不用自己维护,利用redis的内存淘汰机制。当内存不足时自动淘汰部分数据,下次查询时更新缓存 | 给缓存数据添加TTL时间,到期后自动删除缓存,下次查询时更新缓存 | 编写业务逻辑,在修改数据库的同时,更新缓存 |
一致性 | 差【淘汰时间不确认,由redis底层决定】 | 一般 | 好 |
维护成本 | 无 | 低 | 高 |
在实际选用缓存更新策略时,需要根据业务场景来选择
业务场景
- 低一致性需求: 使用内存淘汰机制,
- 高一致性需求:主动更新,并以超时剔除作为兜底解决方案