javaWeb中如何防止两个人同时操作同一条记录(限制单人操作),使用redis的解决方式

最近在做demo的时候,碰到这么一个问题:当页面上同一角色有两个人登录的时候,他们同时操作统一条记录; 简言之就是,同一记录同一时刻多人操作。这种情况在我的业务中回导致数据的冗余,干扰正常的程序运行。

当时想到的解决办是锁表或者使用缓存(当然其他的方式可以在下方留言探讨~),锁表没有尝试过所以自然就想到了缓存。
实现思路是,当页面端用户选中记录并且进行操作的时候,在服务端先不进行业务处理,而是先使用缓存,判断缓存中是否存在该业务单的操作信息,若果有则直接返回页面端,提示用户当前记录正在办理;如果没有则新增存入该条业务的操作信息,(操作信息的格式自定,注意唯一性),然后进行业务逻辑处理,处理完成(包含异常)之后进行缓存中操作信息的删除,到这里就大公告成。
(如果是集群分布式,注意缓存的共享~~)
初步尝试,欢迎各位的指正!
如下是一部分代码的内容:

public boolean doRedisLock(List<String> idList,String LockFlag,String cacheName){
        boolean islockSuccess = true;
        //防止多人人重复操作
        Map cache = CacheManager.getCache(cacheName);

        List<String> tempLockIdsList = new ArrayList<>();
        for (String idTemp : idList) {
            //判断当前记录是否已经正在办理或者已经办理
            String nowStatus = (String) cache.get(idTemp+LockFlag);
            if(nowStatus == null){//如果当前的缓存中存在该记录的操作,继续遍历
                tempLockIdsList.add(idTemp);
                //先将已经遍历的未被他人操作的记录进行锁定,期间不准他人操作
                cache.put(idTemp+cacheName,cacheName);//先将该记录的业务新增至缓存
            }else{//存在已经在办理的记录
                //将预先锁定的记录解除锁定,清除缓存
                for(String tempLockId: tempLockIdsList){
                    cache.remove(tempLockId+cacheName);
                }
                islockSuccess = false ;
            }

        }
        return islockSuccess;
    }
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值