最近在做的项目中有一个消息功能,其中像系统消息的实现,就是在消息表中只有一条记录,然后对应每个用户要标记为删除或者已读,就在另一个表中用一条记录的标记。

这样设置删除或已读标记的时候,是在另一个表的 Mapper.xml 中操作的,也就不会更新消息表的缓存。
有人试图在ABMapper.xml 中采用cache-ref才解决这个问题,不好使。不知道是不是我配得不对。 ABMapper.xml中直接引用A以及B的命名空间, <cache-ref namespace="com.abcd.mapper.AMapper"/> <cache-ref namespace="com.abcd.mapper.BMapper"/>
解决方法:
1、对应的查询禁用缓存。
2、把更新B表的update的语句放到AMapper.xml中,这样的话在AMapper.xml做更新B的操作,也就会刷新A的缓存,这样再去select关联查询B表就可以查询到更新后的数据了。
但是这样仍有问题,就是B表的查询还是存在问题。
3、在应用层强制更新

消息表的数据没有任何改变,但我强制更新一下。这样对于查询比更新多得多的情况应该是比较合适的。
4、自定义缓存
具体实现就看你自己了,完全可以自己定义规则。

本文探讨了在消息系统中,如何有效处理消息状态更新与缓存同步的问题,尤其是在涉及多表关联的情况下,提出了解决缓存更新不一致性的几种方案。
3175

被折叠的 条评论
为什么被折叠?



