采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,看了本章讲解的内容,和我之前面试时说的是一样的。 但是面试官给我的回答是,先更新缓存,再更新数据库。 后来我也上网查了下,先更新缓存,再异步将缓存中的数据同步到数据库。 但是我并没有查到相关的代码逻辑。总结两种方式入戏 1:先更新数据库 - 删缓存 - 再次访问 - 查询数据库 - 存入缓存 2:更新redis(新key覆盖旧key) - 查询 - redis异步将数据同步mysql
老师,如果下次面试官再问我,我该什么回答合适呢?
(1)只要用了缓存,就肯定会有不一致,2个数据源之间事没有事务的,没法保证绝对的一致。
(2)如果想绝对一直,那就别用缓存
(3)如果能接受一定程度上的不一致,可以先更新数据库,再删除缓存。
(4)如果事先更新缓存再更新数据库,如果数据库回滚,缓存怎么处理?这种方式不推荐。如果能接受这种不一致,也可以用。
非常感谢!
如果事先更新缓存再更新数据库,如果数据库回滚,缓存怎么处理? 数据发生了回滚,即出现异常,这里做一个异常回调,删除对应的缓存。 老师,这种思路可行吗?
不推荐 代码的侵入性太大 首先你要记下来redis之前的值 回滚的时候再写回去,如果是insert 你得做一次delete,如果是update 你需要update回去,如果delete你得jinsert,再者 如果回调中发生了异常怎么办
登录后可查看更多问答,登录/注册
各种缓存/JSR303参数检
1.4k 17
1.1k 17
1.2k 16
1.1k 13