开场白:本文不谈Redis的Gossip,也不然Raft,更不谈,只是本着求真务实的态度,聊聊在实际业务中遇到的Redis相关的问题。
本文汇总的都是在实际工作中出现过的常见问题以及自己曾经记录的注意事项。
1、热点key可能是一个随时会被引爆的雷
之前单位有一个实际案例是某个系统的交易成功率低于最低告警值 ,其产生原因就是Redis存在两个热点key,且这两个key都在同一个master节点上(RedisCluster集群),导致在高峰期间对应节点访问流量过大,造成了严重的访问倾斜。
对于这种问题,我们可以通过两种方式解决。
1、增加一层本地缓存,减少远程分布式缓存Redis的访问,基本上多级缓存都这么干;
2、考虑到一致性的问题,用不了本地缓存,像秒杀场景的活动库存这种,就可以将热点key分散存储,一个key拆成多个子key存储。比如某电商进行茅台抢购活动,首先将茅台商品活动库存放到Redis中,茅台就是一个热点key,如maotai,1000,此时就可以将热点key分散存储,茅台抢购是需要预约的,可以将所有预约用户进行分组,Redis会根据组存储活动库存,key可以是 maotai:groupId1 300,maotai:groupId2 300,maotai:groupId3 400,通过这种方式把整个流量分散到不同的节点上,减轻单节点压力。
当然,有人会问,那出现有些节点抢购完了,有些没抢购完怎么办?对于这个问题