Redis-缓存原理
2021-08-23 17:50:46 0 举报
AI智能生成
登录查看完整内容
为你推荐
查看更多
Redis-缓存原理
作者其他创作
大纲/内容
缓存原理
使用场景
DB缓存、减轻服务器压力
提高系统响应
做Session分离
分布式锁
乐观锁
概念
缓存原指CPU上的一种高速存储器,它先于内存与CPU交换数据,速度很快
现泛指存储在计算机上的原始数据的复制集,便于快速访问
在现代互联网j技术中,缓存是系统快速响应的关键技术之一
在大型网站中,从浏览器到网络,再到应用服务器,再到数据库,通过在各个层面上应用缓存技术,大大提升了系统性能和用户体验
分类
客户端缓存
页面缓存
页面自身对某些元素或全部元素j进行存储,并保存成文件
html5 开启步骤
1. 设置manifest描述文件
2. html关联manifest属性
使用LocalStorage进行本地的数据存储
浏览器缓存
当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取
类型
强制缓存
直接使用浏览器的缓存数据
条件
Cache-Control的max-age没有过期或Expires的缓存时间没有过期
meta http-equiv=\"Expires\" content=\
协商缓存
服务器资源未修改,使用浏览器的缓存(304),反之使用服务器资源(200)
APP缓存
原生APP中把数据缓存在内存、文件或本地数据库中(SQLite)中
网络端缓存
通过代理的方式响应客户端请求,对重复的请求返回缓存中的数据资源
Web代理缓存
可以缓存原生服务器的静态资源
常见的反向代理:Nginx
边缘缓存
典型的商业化服务就是CDN
通过部署在各地的边缘服务器,使用户就近获取所需内容,降低网络堵塞,提高用户访问响应速度和命中率
关键技术有内容存储和内容分发
服务端缓存
整个缓存体系的核心,包括数据库级缓存、平台级缓存和应用级缓存
数据库级缓存
MySQL在Server层使用查询缓存机制,将查询后的数据缓存起来
使用K-V结构,key为select语句的hash值,value为查询结果
InnoDB存储引擎中的buffer-pool用于缓存InnoDB索引j及数据块
平台级缓存
指带有缓存特性的应用框架
部署在应用服务器上,也成为服务器本地缓存
应用级缓存
具有缓存功能的中间件
Redis、Memcached、EVCache、Tair等
采用K-V形式存储
利用集群支持高可用、高性能、高并发、高扩展
优势
提升用户体验
缓存的使用可以提升系统的响应能力,大大提升了用户体验
减轻服务器压力
客户端缓存、网络端缓存j减轻应用服务器压力
服务端缓存减轻数据库服务器压力
提升系统性能
缩短系统的响应时间
减少网络传输时间和应用延迟时间
提高系统的吞吐量
增加系统的并发用户数
提高了数据库资源的利用率
代价
额外的硬件支出
缓存是一种软件系统中以空间换时间的技术
需要额外的磁盘空间和内存空间来存储数据
搭建缓存服务器集群需要额外的服务器
高并发缓存失效
在高并发场景下会出现缓存失效
缓存穿透
缓存雪崩
缓存击穿
造成瞬时数据库访问量增大,甚至崩溃
缓存与数据库数据同步
缓存与数据库无法做到数据的实时同步
Redis无法做到主从实时数据同步
缓存并发竞争
多个Redis的客户端同时对一个key进行set值的时候由于执行顺序引起的并发问题
读写模式
Cache Aside Pattern
旁路缓存,是最经典的缓存+数据库读写模式
原理
读:先读缓存,缓存没有,读数据库,然后取出数据放入缓存,返回响应
写:先更新数据库,然后再删除缓存
高并发脏读情况
1. 先更新数据库,再更新缓存
commit前更新缓存,如commit失败,则DB与缓存数据不一致
2. 先删除缓存,再更新数据库
commit前有新的读,缓存空,读到的DB数据是旧数据,则DB与缓存数据不一致
3. 先更新数据库,再删除缓存(推荐)
和2问题一样,但是可以采用延时双删解决
Read/Write Through Pattern
应用程序只操作缓存,缓存操作数据库
Read Through
穿透读模式/直读模式
应用程序读缓存,缓存没有,由缓存回源到数据库,并写入缓存
Write Through
穿透写模式/直写模式
应用程序写缓存,缓存写数据库
该模式需要提供数据库的handler,开发较为复杂
Write Behind Caching Pattern
应用程序只更新缓存
缓存通过异步的方式将数据批量或合并后更新到数据库中
不能实时同步,甚至会丢失数据
设计思路
1. 多层次
Nginx做本地缓存,Redis/应用服务器集群做分布式缓存
分布式缓存宕机,本地缓存还可以使用
2. 数据类型
简单数据类型
采用Memcached
复杂数据类型
采用Redis
3. 要做集群
哨兵 + 主从
RedisCluster
4. 数据结构设计
与数据库表一致
数据库记录与缓存一一对应
缓存字段可能比数据库少一些
缓存的数据是经常访问的(热数据)
与数据库表不一致
需要存储关系、聚合、计算等
redis
0 条评论
回复 删除
下一页