Commit d5c90365 by 邓敏

redis keys 优化

1 parent b509e5d7
......@@ -72,7 +72,7 @@ public class Scheduler {
*/
//@Scheduled(cron = "0 39 18 * * ?")
public void getOprMemRecord() {
Set<String> set = redisUtil.keys("*memberLogin*");
Set<String> set = redisUtil.scan("*memberLogin*");
if(set != null) {
for (String str : set) {
int result = (Integer) redisUtil.get(str);
......
......@@ -468,7 +468,7 @@ public class AdministerServiceImpl extends ServiceImpl<AdministerMapper, Adminis
public Future<ClassSummaryVO> summaryTask3(ClassSummaryVO classSummaryVO, Long classId) {
//签到总次数
long signCount = redisUtil.keys("subsidySignInfo*_classId_" + classId + "*").stream().count();
long signCount = redisUtil.scan("subsidySignInfo*_classId_" + classId + "*").stream().count();
classSummaryVO.setAvgSignCount(MathUtil.intDivCeil(signCount, classSummaryVO.getMemberCount()));
return new AsyncResult<>(classSummaryVO);
}
......@@ -600,7 +600,7 @@ public class AdministerServiceImpl extends ServiceImpl<AdministerMapper, Adminis
public Future<ClassDetailVO> classDetailTask3(ClassDetailVO classDetailVO, ClassDetailDTO classDetailDTO) {
////签到次数
long set = redisUtil.keys(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "memberId_" + classDetailVO.getId() + "_classId_" + classDetailDTO.getId() + "*").stream().count();
long set = redisUtil.scan(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "memberId_" + classDetailVO.getId() + "_classId_" + classDetailDTO.getId() + "*").stream().count();
classDetailVO.setSignCounts(set);
return new AsyncResult<>(classDetailVO);
}
......@@ -793,7 +793,7 @@ public class AdministerServiceImpl extends ServiceImpl<AdministerMapper, Adminis
public Future signDetailsTask2(ClassSignVO classSignVO, ClassDetailDTO classDetailDTO) {
//签到
Set<SignInRecordDO> set = redisUtil.keys(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "memberId_" + classSignVO.getId() + "_classId_" + classDetailDTO.getId() + "*");
Set<SignInRecordDO> set = redisUtil.scan(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "memberId_" + classSignVO.getId() + "_classId_" + classDetailDTO.getId() + "*");
classSignVO.setSignCounts(set.size());
StringBuilder stringBuilder = new StringBuilder();
......
......@@ -103,7 +103,7 @@ public class SignInRecordServiceImpl extends ServiceImpl<SignInRecordMapper, Sig
BeanUtils.copyProperties(classSignInfoVO1,classSignInfoVO);
//平均签到数 向下取整
long signCount = redisUtil.keys(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "*_classId_" + classSignInfoVO.getClassId() + "_*").stream().count();
long signCount = redisUtil.scan(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "*_classId_" + classSignInfoVO.getClassId() + "_*").stream().count();
classSignInfoVO.setAvgSignCount(MathUtil.intDivCeil(signCount, classSignInfoVO1.getMemberCount()));
return new AsyncResult<>(classSignInfoVO);
}
......@@ -116,7 +116,7 @@ public class SignInRecordServiceImpl extends ServiceImpl<SignInRecordMapper, Sig
//获取有效课程
long count = classMemberMappingMapper.getMemberClassCount(signInRecordDO.getMemberId());
long size = redisUtil.keys(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "memberId_" + signInRecordDO.getMemberId() + "*_" + DateFormatUtil.format(new Date(), "yyyyMMdd")+"*").stream().count();
long size = redisUtil.scan(RedisPrefixConstant.SUBSIDY_SIGN_INFO_PREFIX + "memberId_" + signInRecordDO.getMemberId() + "*_" + DateFormatUtil.format(new Date(), "yyyyMMdd")+"*").stream().count();
if (size != count) {
signInStatusVO.setStatus(flag);
......
package com.subsidy.util;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.jedis.JedisConnection;
import org.springframework.data.redis.core.BoundListOperations;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.commands.JedisCommands;
import redis.clients.jedis.commands.MultiKeyCommands;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
......@@ -557,6 +567,22 @@ public class RedisUtil {
}
/**
* 模糊查询
* @param pattern
* @return
*/
public Set scan(String pattern) {
return redisTemplate.execute((RedisCallback<Set<String>>) redisConnection -> {
Set keys = new HashSet<>();
Cursor<byte[]> cursor = redisConnection.scan(new ScanOptions.ScanOptionsBuilder().match(pattern).count(1000).build());
while (cursor.hasNext()) {
keys.add(new String(cursor.next()));
}
return keys;
});
}
/**
* 使用Redis的消息队列
* @param channel
* @param message 消息内容
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!