Buffer缓存:分块传输,减少不断拿零散数据导师系统资源开销太大(摘草莓)
Cache: 是一种高速缓冲存储器,用于存储经常访问的数据或指令的副本。它的目的是为了减少访问慢速设备(如硬盘、远程服务器等)的次数
缓存的层级结构:
客户端缓存
浏览器缓存:网页资源
移动客户端缓存:地图、消息
CDN(内容分发网络)缓存 如:全球新闻站点–>离客户最近的站点
应用级缓存:
本地内存缓存: 如java中的Ehcache
分布式缓存: 如redis
数据库缓存:如Mysql
缓存带来的挑战和解决方案
- **数据一致性问题**
- **缓存与数据源不一致**:由于缓存更新可能存在延迟,可能会出现缓存数据与数据源数据不一致的情况。例如,在一个多人协作的文档编辑系统中,如果一个用户修改了文档内容并保存到数据库,但缓存没有及时更新,其他用户可能会看到旧的文档内容。
- **解决方案**:可以采用双写一致性策略,即在更新数据源的同时更新缓存;或者使用缓存失效策略,在数据源更新后,使缓存失效,下次请求时重新获取数据。另外,还可以通过异步更新缓存来减少对主业务流程的影响,例如使用消息队列来处理缓存更新事件。
- **缓存穿透问题**
- **现象描述**:当一个不存在的数据被频繁请求时,由于缓存中没有该数据,每次请求都会穿透缓存直接查询数据源。如果这种请求量很大,可能会导致数据源(如数据库)的负载过大。例如,有人恶意构造大量不存在的商品ID来请求商品详