场景: 系统拥有5w的用户数据,将这5w的用户数据进行了缓存,并设置了超时时间为1小时。当一小时过后,这5w用户的缓存数据同时失效,从而导致大批量的接口请求访问后台获取用户数据,访问的激增可能会导致服务器服务不可用以及宕机的情况。
解决方案: 可以采用随机数访问的方式,对缓存的数据设置不一样的失效时间,从而在数据失效后重新获取数据时达到分流的效果。
场景: 系统用户A,当数据库中不存在A用户的数据,此时用户通过多级缓存,最后到达数据库层面去查询用户A的数据,而此时没有A用户数据,从而不会被放入缓存中,因此导致缓存穿透问题。
解决方案:
- 缓存空对象
对于在数据库为查询到的用户数据,可以将value设置为空,存放至缓存中。来避免未查到数据导致到达数据库层面,导致数据库访问数激增,拥有数据库宕机的风险。 - 单独过滤处理
对于数据为空的Key进行统一的处理,在请求时统一的拦截处理。避免请求穿透到后端数据库。
场景:短时间内对系统造成冲击与影响,导致缓存节点故障
解决方案:
- 采用一致性的Hash算法来解决,缓解某一服务器的压力,达到负载均衡。