1、简介
2、缓存与内存的区别和相同点
2.1、缓存的常用淘汰策略:
FIFO(先进先出算法):如果一个数据最先进入缓存,则最应该先被淘汰。
LRU( The Least Recently Used:最不经常使用算法): 判断数据最近使用的时间,时间最远的数据优先淘汰。
LFU(Least Frequently Used:最近最少使用算法): 在一段时间,数据使用的越少,则优先淘汰。
2.2、缓存的使用:
1)将数据库部分经常使用的数据存入缓存中。
2)将分页/列表/排序等不常改变的内容存入缓存中。
3)并发计数 / 访问计数通过缓存来计算。
4)详情内容数据、页面放入缓存。
5)分布式session:Redis,memcached。
6)热点数据的排名:积分排名,等级排名。
7)发布订阅:mq。
8)分布式锁:sql、redis、zookeeper。
3、发展过程
3.1、从单体架构看缓存(发展过程)
3.2、从集群架构看缓存(发展过程)
4、集群架构与微服务架构
4.1、集群架构
【1】集群架构的特点:以单体项目为基础进行业务系统的划分,系统之间存在数据冗余,系统耦合度较高。
【2】优点:
(1)项目架构简单,开发成本低。
(2)可以针对系统的某一瓶颈进行扩展。
(3)不同系统可以用不同的技术实现。
【3】缺点:
(1)以单体为基础所有功能依然全部在一个系统,后期难以维护。
(2)集群到一定程度就会产生性能瓶颈。
(5)从微服务看缓存(演化过程)
4.2、微服务架构
【1】微服务架构的特点:
(1)服务可以独立部署
(2)服务讲究单一原则,一个服务做一件事
【2】优点:
(1)服务拆分方便,更细,并可以重复使用。
(2)可以针对某个服务进行扩展和性能优化。
(3)服务部署相对单体架构更简单,业务服务之间影响相对较小,可以分别对各个服务进行部署升级。
【3】缺点:
(1)服务划分的越多,越难以管理.
(2)服务需要不断进行故障监控,故障预警等才能了解到微服务的健康状态。
5、缓存的分类
5.1、常见的客户端缓存:
(1)页面缓存(页面部分或者全部进行离线缓存和本地缓存)
(2)APP缓存
(3)浏览器缓存(将http获取的资源缓存在本地)
(4)服务端缓存
5.2、常见的服务端缓存:
(1)数据库级缓存:
MySQL的查询缓存,Query Cache,在数据库修改程度较小的情况下,使用Query Cache能很大幅度提高查询效率,否则,反之。
(2)平台级缓存(具有缓存功能的专用三方库和框架):
平台级缓存的特点:
(1)基于应用程序的缓存
(2)具有一定的分布式能力
(3)数据不能保证强一致性
(4)无法保证高可用性
(3)应用级缓存(通过代码实现缓存机制)
如CDN缓存(Content Delivery Network : 内容分发网络)
使用CDN缓存有哪些优点:
本地Cache加速
实现跨运营商的网络加速
远程加速
带宽优化
6、分布式缓存系列知识
6.1、缓存雪崩
一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。
给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。
为 key 设置不同的缓存失效时间。
6.2、缓存穿透
6.3、缓存预热
6.4、缓存更新
定时去清理过期的缓存;
当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。
6.5、缓存降级