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

分享到:

最近浏览
851405506前天
最代码贡献等级说明
HTZone前天
最代码贡献等级说明
暂无贡献等级
leizeonban11月27日
暂无贡献等级
醉带蚂11月25日
最代码贡献等级说明
奋青员11月20日
最代码贡献等级说明
东北人11月16日
最代码贡献等级说明
zk2579611月10日
最代码贡献等级说明
wilco11月10日
最代码贡献等级说明
嘻嘻~11月9日
最代码贡献等级说明
贾大神11月7日
暂无贡献等级
nsq000611月6日
最代码贡献等级说明
陈箫goddess10月30日
最代码贡献等级说明
最代码故戌10月28日
最代码贡献等级说明
暂无贡献等级
coding喵10月26日
最代码贡献等级说明
andywong1110月26日
暂无贡献等级
hsz974710月19日
最代码贡献等级说明
mmmm777710月19日
最代码贡献等级说明
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友