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

在java web开发中,数据存储介质有如下几种数据库(rdms,nosql)

缓存系统(redis,memcached,ehcache)

java内部数据结构(map,list)

文件存储(fastdfs)

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

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

出错描述:

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

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

解决方案:

方案1

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

相关代码片段

5f44669d9023f819b9cfa4031178418d.png

方案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开发中数据一致性的情况大同小异,希望能抛砖引玉给牛牛们的开发带来帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值