浏览代码

高并发投票

孙永军 1 年之前
父节点
当前提交
10b9fcc4df
共有 1 个文件被更改,包括 21 次插入2 次删除
  1. 21 2
      src/main/java/com/smcic/api/operate/service/impl/EnrollInfoServiceImpl.java

+ 21 - 2
src/main/java/com/smcic/api/operate/service/impl/EnrollInfoServiceImpl.java

@@ -70,12 +70,31 @@ public class EnrollInfoServiceImpl extends ServiceImpl<EnrollInfoMapper, EnrollI
             one.setUpdateTime(enrollInfo.getUpdateTime());
             one.setUpdateTime(enrollInfo.getUpdateTime());
             one.setType(enrollInfo.getType());
             one.setType(enrollInfo.getType());
             updateById(one);
             updateById(one);
-            enrollInfo = one;
+            updateEnrollCache(one);
         }else{
         }else{
             save(enrollInfo);
             save(enrollInfo);
+            pushEnrollCache(enrollInfo);
         }
         }
 
 
-        pushEnrollCache(enrollInfo);
+    }
+
+    public void updateEnrollCache(EnrollInfo enrollInfo){
+        try {
+            redisTemplate.opsForValue().set(KeysConst.TARGET + enrollInfo.getOperateId() + "_" + enrollInfo.getPhone(),
+                    objectMapper.writeValueAsString(enrollInfo),
+                    Duration.ofSeconds(operateService.getTTl(enrollInfo.getOperateId())));
+            List<String> range = redisTemplate.opsForList().range(KeysConst.ENROLL_LIST + enrollInfo.getOperateId(), 0, -1);
+            for(int i = 0 ; i < range.size(); i++){
+                EnrollInfo item = objectMapper.readValue(range.get(i), EnrollInfo.class);
+                if(enrollInfo.getPhone().equals(item.getPhone())){
+                    redisTemplate.opsForList().set(KeysConst.ENROLL_LIST + enrollInfo.getOperateId(), i, objectMapper.writeValueAsString(enrollInfo));
+                }
+
+            }
+
+        } catch (JsonProcessingException e) {
+            log.error("报名信息入缓存失败", e);
+        }
     }
     }
 
 
     public void pushEnrollCache(EnrollInfo enrollInfo){
     public void pushEnrollCache(EnrollInfo enrollInfo){