最代码官方的gravatar头像
最代码官方 2017-09-30 10:24:15
java web开发中数据一致性的问题

在java web开发中,数据存储介质有如下几种

  1. 数据库(rdms,nosql)
  2. 缓存系统(redis,memcached,ehcache)
  3. java内部数据结构(map,list)
  4. 文件存储(fastdfs)

所以如果同一数据在这几种介质中同时存在的话就需要同时更新保持一致,否则有一个没更新,某一个业务拿错误的数据去做操作自然会引发一系列数据错误问题。

最代码在开发的过程中,遇到过这类的问题,总结分享下给牛牛。

出错描述:

1.某个用户登录状态下,管理员在后台修改了他的级别,更新了对应mysql中的数据,但是没有更新session中用户数据

2.该登录用户下载其他用户代码时被扣牛币,但是因为session中的用户级别是老数据,此时save用户到mysql就导致了用户级别出错

解决方案:

方案1

通过拦截器每次在请求前将session中的user数据从mysql中load到然后将session的user指向mysql的user数据,保证session登录用户的数据是和mysql的用户一致

相关代码片段

java web开发中数据一致性的问题

方案2

session中只保存登录用户id,在需要获取登录用户的数据时,得到该用户id再从mysql中load  user,保证session数据和mysql一致

相关代码片段

登录成功后

session.setAttribute(GlobalConstants.SESSION_LOGIN_USER_ID, userId);

需要登录用户信息的时候

Long userId=session.getAttribute(GlobalConstants.SESSION_LOGIN_USER_ID);
User user=userService.findById(userId);

其他web开发中数据一致性的情况大同小异,希望能抛砖引玉给牛牛们的开发带来帮助


打赏

已有3人打赏

最代码客服的gravatar头像 最不屑一顾是相思的gravatar头像 kaka的gravatar头像
最近浏览
全栈小白  LV34 2023年1月8日
dasdal  LV1 2020年9月25日
tracy_lee  LV15 2018年11月7日
Joey0828lhy  LV1 2018年9月28日
xzk0105  LV3 2018年6月21日
微微上翘  LV23 2018年2月24日
Shemar  LV12 2017年12月27日
851405506  LV7 2017年12月12日
HTZone  LV1 2017年12月12日
哈根达斯思密达  LV6 2017年12月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友