使用本地缓存的好处:
减少网络请求,提高性能;
分布式系统中,天然分布式缓存;
减少远程缓存的读压力。
使用本地缓存的缺点:
进程空间大小有限,不支持大数据量存储(存储热点数据);
重启程序会丢失数据(从MySQL或redis中读取,然后存一份到本地缓存);
分布式场景下,系统之间数据可能存在不一致和远程缓存数据可能会存在不一致(两系统读数据库的同时把数据修改导致数据不一致)(保证最终一致性,缩短本地缓存缓存时间)。
什么场景下需要用到多级缓存?
热点商品详情页
热捜
热门帖子
热门用户主页
热点
热点:指在一段时间内,被广泛关注的物品或事件,例如微博热搜,热卖商品,热点新闻,明星直播等等
热点产生主要包含2个条件:
1. 有限时间
2.流量高聚
而在互联网领域,热点又主要分为2大类:
1.有预期的热点:比如在电商活动当中推出的爆款联名限量款的商品,又或者是秒杀的会场活动等
2.无预期的热点:比如受到了黑客的恶意攻击,网络爬虫频繁访问,又或者突发新闻带来的流量冲击等
热点探测使用场景
MySQL中被频繁访问的数据,如热门商品的主键Id
Redis缓存中被密集访问的Key,如热门商品的详情需要getgoods$ld
恶意攻击或机器人爬虫的请求信息,如特定标识的userld、机器IP
频繁被访问的接口地址,如获取用户信息接口/userInfo/+userld
使用热点探测的好处
提升性能,规避风险:无预期的热数据可能会对业务系统带来极大的风险,可将风险分为对数据层的风险与对应用服务的风险。
对数据层的风险:正常情况下,Redis缓存单机就可支持十万左右QPS,并能通过集群部暑提高整体负载能力,对于瞬时过高并发的请求,因为Redis单线程原因会导致正常请求排队,或者因为热点集中导致分片集群压力过载而瘫痪,从而击穿到DB引起服务器雪崩。
对应用服务的风险:每个应用在单位时间所能接受和处理的请求量是有限的,如果受到恶意请求的攻击,让恶意用户独自占用了大量请求处理资源,就会导致正常用户的请求无法及时响应。
热点探测
对于单机应用,检测热数据很简单,直接在本地为每个Key创建一个滑动窗口计数器,统计单位时间内的访问总数(频率),并通过一个集合存放检测到的热Key。
分布式应用节点感知热点规则配置,将热点数据进行上报,工作节点进行热点数据统计,对于符合阀值的热点进行推送给客户端,应用收到热点信息进行本地缓存等策略这五个步骤:
1、 热点规则:配置热Key的上报规则,圈出需要重点监测的Key
2、热点上报:应用服务将自己的热Key访问情况上报给集中计算单元
3、热点统计:收集各应用实例上报的信息,使用滑动窗口算法计算Key的热度
4、热点推送:当Key的热度达到设定值时,推送热Key信息至所有应用实例
5、热点缓存:各应用实例收到热Key信息后,对Key值进行本地缓存