最近在做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 :