1.什么是缓存?
-
CDN 缓存:CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中。
应用场景:主要缓存静态资源,例如图片,视频 -
反向代理缓存:反向代理位于应用服务器上,处理所有对 Web 服务器的请求
应用场景:一般只缓存体积较小静态文件资源,如 css、js、图片 -
本地应用缓存:在单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适。
应用场景:缓存字典等常用数据 -
分布式缓存:指的是与应用分离的缓存组件或服务,其最大的优点是自身就是一个独立的应用,与本地应用隔离,多个应用可直接的共享缓存
分布式缓存实现方式: -
Memcached:Memcached 是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的 Hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度
-
Redis:Redis 是一个远程内存数据库(非关系型数据库),性能强劲,具有复制特性以及解决问题而生的独一无二的数据模型。它可以存储键值对与 5 种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能
Redis数据模型:
Redis 的数据淘汰策略:
Redis 的持久化方式:
Redis 的缓存设计原则:
分层缓存架构设计:
缓存带来的复杂度问题:
-
数据一致性 :
-
缓存穿透
缓存一般是 Key-Value 方式存在,当某一个 Key 不存在时会查询数据库,假如这个 Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。
主要解决方案:
对结果为空的数据也进行缓存,当此 Key 有数据后,清理缓存。一定不存在的 Key,采用布隆过滤器,建立一个大的 Bitmap 中,查询时通过该 Bitmap 过滤。 -
缓存雪崩
-
缓存热点
一些特别热点的数据,高并发访问同一份缓存数据,导致缓存服务器压力过大。
解决:复制多份缓存副本,把请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力