缓存问题

缓存问题

通常项目中是在保存数据时,清空缓存,从数据库获取数据时,将获取到数据同时写入到缓存中。

情况一

1、保存pojo,清除缓存;

2、通过get获取pojo对象,将pojo写入缓存;

3、处理pojo,提交到数据库;

4、提交异常,如数据库字段长度不够,导致数据无法保存,此时已经将修改后的pojo对象写入到了缓存中,但是数据库由于异常,数据没有真正写入。

5、通过get获取pojo,处理后保存到数据库,此时会将脏数据库保存到数据库中。

情况二

1、修改数据,删除缓存;

2、在事务未提交之前,另一个用户查询数据时会将旧数据写入缓存;

3、提交事务

4、获取数据时发现缓存中已存在数据,此时获取到就数据;

解决方案:

情况一、在保存时记录缓存的key,检测到异常,将缓存的key从缓存中删除。

情况二、在保存数据删除缓存时记录删除缓存的key,在事务提交后,再次从缓存中删除该key。

文章目录
  1. 1. 缓存问题
  2. 2. 情况一
  3. 3. 情况二
    1. 3.1. 解决方案:
|