最代码官方的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头像

分享到:

最近浏览
hsz9747昨天
暂无贡献等级
mmmm7777昨天
最代码贡献等级说明
kkomaa昨天
最代码贡献等级说明
wwwzzzjjj前天
最代码贡献等级说明
灬艾希10月17日
最代码贡献等级说明
迷彩风情 LV210月17日
最代码贡献等级说明
skwx10月16日
最代码贡献等级说明
meiyuxian10月16日
暂无贡献等级
yuannauy10月14日
暂无贡献等级
a78474808310月13日
最代码贡献等级说明
李洋Ayato10月13日
最代码贡献等级说明
懒代码10月13日
暂无贡献等级
yclycl10月13日
最代码贡献等级说明
最代码伊成 LV310月13日
最代码贡献等级说明
mzoai10月13日
暂无贡献等级
willingly10月12日
暂无贡献等级
wdyouwen10月12日
暂无贡献等级
zengqian10月12日
暂无贡献等级
bbsbs10月11日
最代码贡献等级说明
最代码广告位
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友