有时为了执行数据快,会将一些数据放入缓存。我们的dao层是自己写的一套,项目中有用到用户表,而这个表采用的是乐观锁更新(采用乐观锁更新与否,是在表里有个标识字段,dao底层控制乐观锁更新)。今天工程遇到了一个问题,工程里有些更新用户信息的方法,只保存了数据库,没有更新到redis缓存,所以会存在这样一种情况:
当取用户缓存信息,对了信息做了修改,保存的时候,乐观锁更新时,发现版本不一致因为保存了数据库,版本已经加1,而缓存里的用户信息的版本还是不变。
按理来说,这种情况是对的,不允许脏数据,但是这样在更新用户信息(有很多地方涉及到用户表的更新),就比较容易出现更新失败,避免大面积的出现这种情况,所以在保存用户信息到数据库的同时,也更新缓存。
个人感觉缓存的设计还是必须的,什么数据应该进行缓存,什么数据应该从缓存取,而不是单纯的就拿来用即可。