先更新数据库,之后删除缓存,可以很大程度上确保数据一致性【并发情景下】
而不可忽视的是,更新和删除中间可能出现的失败,如果更新数据库成功,但是删除缓存失败也会造成数据不一致的问题,因此这里可以引入消息队列,将删除缓存的任务发送到消息队列中,由指定的消费者去进行,失败就重试。
如果不想在业务层引入消息队列去解决,可以订阅数据库日志(binlog),接着根据日志的变更去删除对应的缓存信息,这样在业务层就只需要更新数据库,其他的操作可以交给订阅日志的中间件去进行,例如 阿里的canal。
结论:推荐采用「先更新数据库,再删除缓存」方案,并配合「消息队列」或「订阅变更日志」的方式来做。