Selaa lähdekoodia

网络教室redis锁优化

zouxuan 4 vuotta sitten
vanhempi
commit
f77c735505
1 muutettua tiedostoa jossa 4 lisäystä ja 15 poistoa
  1. 4 15
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

+ 4 - 15
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -301,20 +301,14 @@ public class RoomServiceImpl implements RoomService {
             roomMember = saveRoomMember(roomId,userId);
         }
         String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
-        if(redisTemplate.hasKey(joinSuccessKey)){
-            //兼容旧版本,防止重复调用
-            redisTemplate.delete(joinSuccessKey);
+        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(joinSuccessKey, roomId, 2l, TimeUnit.SECONDS);
+        if(aBoolean){
             RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
             if(roleEnum == RoleTeacher && StringUtils.isNotEmpty(deviceNum)){
                 signInSuccess(roomMember,deviceNum);
             }
             return;
         }
-        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
-        if(redisTemplate.hasKey(leaveSuccessKey)){
-            redisTemplate.delete(leaveSuccessKey);
-        }
-        redisTemplate.opsForValue().setIfAbsent(joinSuccessKey,roomId,2l,TimeUnit.SECONDS);
 
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
         CourseSchedule schedule = courseScheduleDao.getLock(Long.parseLong(roomId.substring(1)));
@@ -447,8 +441,8 @@ public class RoomServiceImpl implements RoomService {
         }
 
         String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
-        if(redisTemplate.hasKey(leaveSuccessKey)){
-            redisTemplate.delete(leaveSuccessKey);
+        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey, roomId, 2, TimeUnit.SECONDS);
+        if(aBoolean){
             if (StringUtils.isNotEmpty(deviceNum)){
                 //如果设备号不为空,更新设备号
                 if(roleEnum == RoleTeacher){
@@ -457,11 +451,6 @@ public class RoomServiceImpl implements RoomService {
             }
             return;
         }
-        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
-        if(redisTemplate.hasKey(joinSuccessKey)){
-            redisTemplate.delete(joinSuccessKey);
-        }
-        redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey,roomId,2,TimeUnit.SECONDS);
 
         String username;
         SysUser sysUser = sysUserFeignService.queryUserById(parseInt);