在web开发,特别是高并发,用户量大的网站,缓存是非常重要的部分,缓存的目的就是降低后端服务器的压力,使系统能更健壮的运行,提供更好的服务。下面是我知道的缓存要点。
1.多级缓存
多级缓存包括:
CND:内容网络分发
浏览器缓存
接入层缓存:负载均衡层()
应用层缓存:Tomcat/Apache/Nginx等
分布式缓存:redis/Memcahe等
2.各层缓存的作用
接入层缓存:可以提升系统的吞吐量,降低后端的压力,特别是对热点数据
分布式缓存:减少访问回源率(查询数据库)
应用层缓存:缓冲缓存失败或者雪崩之后对后端冲击
2.分布式缓存负载均衡算法
分布缓存中:主要有两种算法,轮询和一致性哈希
轮询:可以是服务的请求更加均衡,但缓存命中率低,特别随着机器的增多,命中率会越来越低。
例如只有2台机器,则命中率是50%,增长到3台后命中率就是33%,4台就是25%。
一致性哈希:提升了缓存的命中率,但是可能造成的某台机器负载过重。因为相同的请求都指向了同一台服务器
考虑到两者的优缺点,在使用时,可以设置阈值,在系统在阈值下,使用一致性哈希,让缓存命中率更高,超过这个阈值,系统自动降级为轮询
3.缓存淘汰算法
LRU:最近最少使用
LRU-K:最近使用过K次
LFU:根据数据的历史访问频率来淘汰数据
FIFO:先进先出
4.缓存过期与不过期策略
5.缓存组件的实现原理及差异(主要是Redis/Memcache等主流缓存组件)
6.缓存使用模式
Cache-Aside
Cache-As-SoR:Read-Through/Write-Through/Write-Behind
7.缓存中需要关注的问题
(1)热点数据
(2)大Value
(3)数据一致性问题
(4)更新缓存与原子性问题
(5)缓存崩溃与恢复问题
(6)命中率问题
8.缓存系统会出现的问题
(1) 雪崩
(2) 缓存穿透
(3)数据一致性问题
(4)热点数据
9.热点发现
站在巨人的肩膀上成长,文章思想和经验来自各类大神 参考 《亿级流量网站架构核心技术》 《深入分布式缓存从原理到实践》