(1)使用MQ实时更新Redis缓存
场景: 像订单服务之类的核心业务,如果我们要更新缓存Redis中的数据,一个可行的方法是,启动一个更新订单缓存的服务,接收订单变更的消息队列(Message Queue,MQ)中的消息,然后更新Redis中缓存的订单数据。对应这类核心的数据,使用方通常会非常的多,服务本来就需要向外发送消息,增加一个消息订阅,基本上不会增加额外的开发成本,也不需要对订单服务本身做出任何更改。
对于该架构,我们唯一担心的问题是,如果消息丢失,应该怎么办?因为现在消息时缓存数据的唯一来源,一旦出现消息丢失的问题,缓存力缺少的那条数据就会永远无法补上,所以,必须保证整个消息链条的可靠性,不过,好在现在的MQ集群(比如Kafka或RocketMQ),都拥有高可用性和高可靠性的保证机制,只要能事先正确配置好,就可以满足数据的可靠性要求。 像订单服务这样,由于本来就有现成的数据变更消息可以订阅,因此像这样更新缓存也是一个不错的选择,因为这种方式实现起来比较简单,对于其他模块也完全没有侵入;