请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

面试:更新数据是先更新mysql数据库,还是先更新redis缓存

老师,看了本章讲解的内容,和我之前面试时说的是一样的。
但是面试官给我的回答是,先更新缓存,再更新数据库。
后来我也上网查了下,先更新缓存,再异步将缓存中的数据同步到数据库。
但是我并没有查到相关的代码逻辑。总结两种方式入戏
1:先更新数据库 - 删缓存 - 再次访问 - 查询数据库 - 存入缓存
2:更新redis(新key覆盖旧key) - 查询 - redis异步将数据同步mysql

老师,如果下次面试官再问我,我该什么回答合适呢?

正在回答

1回答

(1)只要用了缓存,就肯定会有不一致,2个数据源之间事没有事务的,没法保证绝对的一致。

(2)如果想绝对一直,那就别用缓存

(3)如果能接受一定程度上的不一致,可以先更新数据库,再删除缓存。

(4)如果事先更新缓存再更新数据库,如果数据库回滚,缓存怎么处理?这种方式不推荐。如果能接受这种不一致,也可以用。

1 回复 有任何疑惑可以回复我~
  • 提问者 qq_慕仰958715 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-11-15 10:25:29
  • 提问者 qq_慕仰958715 #2
    如果事先更新缓存再更新数据库,如果数据库回滚,缓存怎么处理?
    数据发生了回滚,即出现异常,这里做一个异常回调,删除对应的缓存。
    老师,这种思路可行吗?
    回复 有任何疑惑可以回复我~ 2019-11-15 10:25:45
  • 若鱼1919 回复 提问者 qq_慕仰958715 #3
    不推荐 代码的侵入性太大  首先你要记下来redis之前的值 回滚的时候再写回去,如果是insert 你得做一次delete,如果是update 你需要update回去,如果delete你得jinsert,再者 如果回调中发生了异常怎么办
    回复 有任何疑惑可以回复我~ 2019-11-15 15:15:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信