以旁路缓存为基础,探讨以下方式
**更新MySQL后,不管Redis,以过期时间兜底**: • **特点**:只更新数据库,不立即处理缓存,依赖缓存的过期时间来自动刷新缓存。 • **优点**:实现简单,避免了并发问题。 • **缺点**:在缓存未过期期间,读取到的仍然是旧数据。**更新MySQL之后,操作Redis**: • **特点**:在更新数据库后立即更新或删除缓存,以确保缓存中的数据与数据库中的数据一致。 • **具体操作**: • **更新缓存**:直接将新的数据写入缓存。这种方法可能会有并发问题,导致缓存和数据库不一致(写库+写缓存,双写在并发时导致脏写)。 • **删除缓存**:删除缓存中的数据,确保下次读取时从数据库中获取最新的数据,并将其写入缓存。这是推荐的方法,能有效避免并发问题。在**缓存击穿**情况下,可考虑使用**乐观锁**的方式写入缓存(不存在则写入) • **优点**:缓存与数据库数据一致性高。 • **缺点**:实现复杂度较高,尤其在高并发场景下。**异步将MySQL的更新同步到Redis**: • **特点**:在更新数据库后,将更新操作记录下来,通过异步任务将数据同步到缓存中。 • **优点**:降低了数据库操作和缓存操作之间的耦合度,提高系统的异步处理能力。 • **缺点**:实现复杂度高,需要处理异步任务的可靠性和数据一致性问题。
其中,方式 3 可用 阿里巴巴开源组件 canal