面试题答案
一键面试- 主动推送策略
- 实现思路:在MySQL数据库的更新操作(如
UPDATE
语句)之后,通过数据库触发器或者应用层逻辑,主动向消息队列(如Kafka、RabbitMQ等)发送一条更新消息。消息内容包含被更新数据的主键以及更新后的数据。消费端(通常是一个独立的服务)从消息队列中获取这些消息,根据主键去Redis中更新对应的索引数据。这样,一旦MySQL数据更新,就能快速触发Redis索引的更新。
- 实现思路:在MySQL数据库的更新操作(如
- 定时轮询策略优化
- 实现思路:除了定期全量或增量同步MySQL数据到Redis外,缩短轮询间隔时间,以更快地发现MySQL中的数据更新。例如,原本每小时同步一次,可以调整为每15分钟同步一次。同时,在轮询过程中,记录每次同步的时间戳,下次轮询时只获取该时间戳之后更新的数据,减少不必要的数据处理。这种方式虽然不能像主动推送那样实时,但能在一定程度上提高同步频率,确保Redis索引相对及时地更新。
- 双写一致性策略
- 实现思路:在应用层对MySQL数据进行更新操作时,同时对Redis中的索引数据进行更新。通过将这两个操作放在一个事务(如果应用层支持)或者采用分布式事务解决方案(如TCC、Saga等)来保证数据的一致性。例如,先更新MySQL数据,成功后再更新Redis索引,如果Redis更新失败,则回滚MySQL的更新操作,反之亦然。这样可以从源头上确保Redis索引和MySQL数据的一致性。