fix:RedisUtils相关修改

This commit is contained in:
JoseK
2023-06-06 01:30:20 +08:00
parent faaa6c5591
commit dcaf90d3c1
4 changed files with 96 additions and 91 deletions

View File

@@ -15,7 +15,8 @@ import java.util.Objects;
@Configuration
public class RedisConfig {
@Bean
@Bean("myRedisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
// 创建模板
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
@@ -30,10 +31,11 @@ public class RedisConfig {
// value和 hashValue采用 JSON序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
public class MyRedisSerializerCustomized extends GenericJackson2JsonRedisSerializer {
private static class MyRedisSerializerCustomized extends GenericJackson2JsonRedisSerializer {
@Override
public byte[] serialize(Object source) throws SerializationException {
if (Objects.nonNull(source)) {

View File

@@ -44,7 +44,7 @@ public class CursorUtils {
.map(String::valueOf)
.orElse(null);
Boolean isLast = result.size() != cursorPageBaseReq.getPageSize();
return new CursorPageBaseResp(cursor, isLast, result);
return new CursorPageBaseResp<>(cursor, isLast, result);
}
public <T> CursorPageBaseResp<T> getCursorPageByMysql(IService<T> mapper, CursorPageBaseReq request, Consumer<LambdaQueryWrapper<T>> initWrapper, SFunction<T, ?> cursorColumn) {
@@ -60,7 +60,7 @@ public class CursorUtils {
.map(String::valueOf)
.orElse(null);
Boolean isLast = page.getRecords().size() != request.getPageSize();
return new CursorPageBaseResp(cursor, isLast, page.getRecords());
return new CursorPageBaseResp<>(cursor, isLast, page.getRecords());
}
}

View File

@@ -8,24 +8,20 @@ import org.springframework.data.redis.core.*;
import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j
@Component
public class RedisUtils {
public RedisTemplate redisTemplate;
private static StringRedisTemplate stringRedisTemplate;
private static RedisTemplate<String, Object> redisTemplate;
@PostConstruct
public void init() {
this.stringRedisTemplate = SpringUtil.getBean(StringRedisTemplate.class);
static {
RedisUtils.stringRedisTemplate = SpringUtil.getBean(StringRedisTemplate.class);
RedisUtils.redisTemplate = SpringUtil.getBean("myRedisTemplate");
}
private static final String LUA_INCR_EXPIRE =
@@ -49,7 +45,7 @@ public class RedisUtils {
* @param key 键
* @param time 时间(秒)
*/
public static boolean expire(String key, long time) {
public static Boolean expire(String key, long time) {
try {
if (time > 0) {
stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);
@@ -68,7 +64,7 @@ public class RedisUtils {
* @param time 时间(秒)
* @param timeUnit 单位
*/
public boolean expire(String key, long time, TimeUnit timeUnit) {
public static Boolean expire(String key, long time, TimeUnit timeUnit) {
try {
if (time > 0) {
redisTemplate.expire(key, time, timeUnit);
@@ -86,7 +82,7 @@ public class RedisUtils {
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public static long getExpire(String key) {
public static Long getExpire(String key) {
return stringRedisTemplate.getExpire(key, TimeUnit.SECONDS);
}
@@ -96,7 +92,7 @@ public class RedisUtils {
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public static long getExpire(String key, TimeUnit timeUnit) {
public static Long getExpire(String key, TimeUnit timeUnit) {
return stringRedisTemplate.getExpire(key, timeUnit);
}
@@ -106,7 +102,7 @@ public class RedisUtils {
* @param pattern key
* @return /
*/
public List<String> scan(String pattern) {
public static List<String> scan(String pattern) {
ScanOptions options = ScanOptions.scanOptions().match(pattern).build();
RedisConnectionFactory factory = redisTemplate.getConnectionFactory();
RedisConnection rc = Objects.requireNonNull(factory).getConnection();
@@ -131,7 +127,7 @@ public class RedisUtils {
* @param size 每页数目
* @return /
*/
public List<String> findKeysForPage(String patternKey, int page, int size) {
public static List<String> findKeysForPage(String patternKey, int page, int size) {
ScanOptions options = ScanOptions.scanOptions().match(patternKey).build();
RedisConnectionFactory factory = redisTemplate.getConnectionFactory();
RedisConnection rc = Objects.requireNonNull(factory).getConnection();
@@ -167,7 +163,7 @@ public class RedisUtils {
* @param key 键
* @return true 存在 false不存在
*/
public boolean hasKey(String key) {
public static Boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
@@ -185,21 +181,23 @@ public class RedisUtils {
public static void del(String... keys) {
if (keys != null && keys.length > 0) {
if (keys.length == 1) {
boolean result = stringRedisTemplate.delete(keys[0]);
log.debug("--------------------------------------------");
log.debug(new StringBuilder("删除缓存:").append(keys[0]).append(",结果:").append(result).toString());
Boolean result = stringRedisTemplate.delete(keys[0]);
log.debug("--------------------------------------------");
log.debug("删除缓存:" + keys[0] + ",结果:" + result);
} else {
Set<String> keySet = new HashSet<>();
for (String key : keys) {
keySet.addAll(stringRedisTemplate.keys(key));
Set<String> stringSet = stringRedisTemplate.keys(key);
if(Objects.nonNull(stringSet) && !stringSet.isEmpty()){
keySet.addAll(stringSet);
}
}
long count = stringRedisTemplate.delete(keySet);
Long count = stringRedisTemplate.delete(keySet);
log.debug("--------------------------------------------");
log.debug("成功删除缓存:" + keySet.toString());
log.debug("成功删除缓存:" + keySet);
log.debug("缓存删除数量:" + count + "");
log.debug("--------------------------------------------");
}
log.debug("--------------------------------------------");
}
}
@@ -222,7 +220,7 @@ public class RedisUtils {
* @param value 值
* @return true成功 false失败
*/
public static boolean set(String key, Object value) {
public static Boolean set(String key, Object value) {
try {
stringRedisTemplate.opsForValue().set(key, objToStr(value));
return true;
@@ -243,7 +241,10 @@ public class RedisUtils {
public static <T> List<T> mget(Collection<String> keys, Class<T> tClass) {
List<String> list = stringRedisTemplate.opsForValue().multiGet(keys);
return (List<T>) list.stream().map(o -> toBeanOrNull(o, tClass)).collect(Collectors.toList());
if (Objects.isNull(list)) {
return new ArrayList<>();
}
return list.stream().map(o -> toBeanOrNull(o, tClass)).collect(Collectors.toList());
}
static <T> T toBeanOrNull(String json, Class<T> tClass) {
@@ -271,7 +272,7 @@ public class RedisUtils {
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time) {
public Boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
@@ -294,7 +295,7 @@ public class RedisUtils {
* @param timeUnit 类型
* @return true成功 false 失败
*/
public static boolean set(String key, Object value, long time, TimeUnit timeUnit) {
public static Boolean set(String key, Object value, long time, TimeUnit timeUnit) {
try {
if (time > 0) {
stringRedisTemplate.opsForValue().set(key, objToStr(value), time, timeUnit);
@@ -317,7 +318,7 @@ public class RedisUtils {
* @param item 项 不能为null
* @return 值
*/
public Object hget(String key, String item) {
public static Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}
@@ -327,7 +328,7 @@ public class RedisUtils {
* @param key 键
* @return 对应的多个键值
*/
public Map<Object, Object> hmget(String key) {
public static Map<Object, Object> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}
@@ -339,7 +340,7 @@ public class RedisUtils {
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public boolean hmset(String key, Map<String, Object> map) {
public static Boolean hmset(String key, Map<String, Object> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
@@ -357,7 +358,7 @@ public class RedisUtils {
* @param time 时间(秒)
* @return true成功 false失败
*/
public boolean hmset(String key, Map<String, Object> map, long time) {
public static Boolean hmset(String key, Map<String, Object> map, long time) {
try {
redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
@@ -378,7 +379,7 @@ public class RedisUtils {
* @param value 值
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value) {
public static Boolean hset(String key, String item, Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
@@ -397,7 +398,7 @@ public class RedisUtils {
* @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value, long time) {
public static Boolean hset(String key, String item, Object value, long time) {
try {
redisTemplate.opsForHash().put(key, item, value);
if (time > 0) {
@@ -416,7 +417,7 @@ public class RedisUtils {
* @param key 键 不能为null
* @param item 项 可以使多个 不能为null
*/
public void hdel(String key, Object... item) {
public static void hdel(String key, Object... item) {
redisTemplate.opsForHash().delete(key, item);
}
@@ -427,7 +428,7 @@ public class RedisUtils {
* @param item 项 不能为null
* @return true 存在 false不存在
*/
public boolean hHasKey(String key, String item) {
public static Boolean hHasKey(String key, String item) {
return redisTemplate.opsForHash().hasKey(key, item);
}
@@ -439,7 +440,7 @@ public class RedisUtils {
* @param by 要增加几(大于0)
* @return
*/
public double hincr(String key, String item, double by) {
public static Double hincr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, by);
}
@@ -451,7 +452,7 @@ public class RedisUtils {
* @param by 要减少记(小于0)
* @return
*/
public double hdecr(String key, String item, double by) {
public static Double hdecr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, -by);
}
@@ -463,7 +464,7 @@ public class RedisUtils {
* @param key 键
* @return
*/
public Set<Object> sGet(String key) {
public static Set<Object> sGet(String key) {
try {
return redisTemplate.opsForSet().members(key);
} catch (Exception e) {
@@ -479,7 +480,7 @@ public class RedisUtils {
* @param value 值
* @return true 存在 false不存在
*/
public boolean sHasKey(String key, Object value) {
public static Boolean sHasKey(String key, Object value) {
try {
return redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
@@ -495,12 +496,12 @@ public class RedisUtils {
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSet(String key, Object... values) {
public static Long sSet(String key, Object... values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
log.error(e.getMessage(), e);
return 0;
return 0L;
}
}
@@ -512,7 +513,7 @@ public class RedisUtils {
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSetAndTime(String key, long time, Object... values) {
public static Long sSetAndTime(String key, long time, Object... values) {
try {
Long count = redisTemplate.opsForSet().add(key, values);
if (time > 0) {
@@ -521,7 +522,7 @@ public class RedisUtils {
return count;
} catch (Exception e) {
log.error(e.getMessage(), e);
return 0;
return 0L;
}
}
@@ -531,12 +532,12 @@ public class RedisUtils {
* @param key 键
* @return
*/
public long sGetSetSize(String key) {
public static Long sGetSetSize(String key) {
try {
return redisTemplate.opsForSet().size(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
return 0;
return 0L;
}
}
@@ -547,13 +548,12 @@ public class RedisUtils {
* @param values 值 可以是多个
* @return 移除的个数
*/
public long setRemove(String key, Object... values) {
public static Long setRemove(String key, Object... values) {
try {
Long count = redisTemplate.opsForSet().remove(key, values);
return count;
return redisTemplate.opsForSet().remove(key, values);
} catch (Exception e) {
log.error(e.getMessage(), e);
return 0;
return 0L;
}
}
@@ -567,7 +567,7 @@ public class RedisUtils {
* @param end 结束 0 到 -1代表所有值
* @return
*/
public List<Object> lGet(String key, long start, long end) {
public static List<Object> lGet(String key, long start, long end) {
try {
return redisTemplate.opsForList().range(key, start, end);
} catch (Exception e) {
@@ -582,12 +582,12 @@ public class RedisUtils {
* @param key 键
* @return
*/
public long lGetListSize(String key) {
public static Long lGetListSize(String key) {
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
return 0;
return 0L;
}
}
@@ -598,7 +598,7 @@ public class RedisUtils {
* @param index 索引 index>=0时 0 表头1 第二个元素依次类推index<0时-1表尾-2倒数第二个元素依次类推
* @return
*/
public Object lGetIndex(String key, long index) {
public static Object lGetIndex(String key, long index) {
try {
return redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
@@ -614,7 +614,7 @@ public class RedisUtils {
* @param value 值
* @return
*/
public boolean lSet(String key, Object value) {
public static Boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
@@ -632,7 +632,7 @@ public class RedisUtils {
* @param time 时间(秒)
* @return
*/
public boolean lSet(String key, Object value, long time) {
public static Boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) {
@@ -652,7 +652,7 @@ public class RedisUtils {
* @param value 值
* @return
*/
public boolean lSet(String key, List<Object> value) {
public static Boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
@@ -670,7 +670,7 @@ public class RedisUtils {
* @param time 时间(秒)
* @return
*/
public boolean lSet(String key, List<Object> value, long time) {
public static Boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) {
@@ -691,7 +691,7 @@ public class RedisUtils {
* @param value 值
* @return /
*/
public boolean lUpdateIndex(String key, long index, Object value) {
public static Boolean lUpdateIndex(String key, long index, Object value) {
try {
redisTemplate.opsForList().set(key, index, value);
return true;
@@ -709,12 +709,12 @@ public class RedisUtils {
* @param value 值
* @return 移除的个数
*/
public long lRemove(String key, long count, Object value) {
public static Long lRemove(String key, long count, Object value) {
try {
return redisTemplate.opsForList().remove(key, count, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
return 0;
return 0L;
}
}
@@ -723,11 +723,14 @@ public class RedisUtils {
* @param ids id
*/
public void delByKeys(String prefix, Set<Long> ids) {
Set<Object> keys = new HashSet<>();
Set<String> keys = new HashSet<>();
for (Long id : ids) {
keys.addAll(redisTemplate.keys(new StringBuffer(prefix).append(id).toString()));
Set<String> stringSet = redisTemplate.keys(prefix + id);
if (Objects.nonNull(stringSet) && !stringSet.isEmpty()) {
keys.addAll(stringSet);
}
}
long count = redisTemplate.delete(keys);
Long count = redisTemplate.delete(keys);
// 此处提示可自行删除
log.debug("--------------------------------------------");
log.debug("成功删除缓存:" + keys.toString());
@@ -761,7 +764,7 @@ public class RedisUtils {
* @param values
* @return
*/
public Long zAdd(String key, Set<TypedTuple<String>> values) {
public static Long zAdd(String key, Set<TypedTuple<Object>> values) {
return redisTemplate.opsForZSet().add(key, values);
}
@@ -770,7 +773,7 @@ public class RedisUtils {
* @param values
* @return
*/
public Long zRemove(String key, Object... values) {
public static Long zRemove(String key, Object... values) {
return redisTemplate.opsForZSet().remove(key, values);
}
@@ -790,7 +793,7 @@ public class RedisUtils {
* @param delta
* @return
*/
public Double zIncrementScore(String key, String value, double delta) {
public static Double zIncrementScore(String key, String value, double delta) {
return redisTemplate.opsForZSet().incrementScore(key, value, delta);
}
@@ -801,7 +804,7 @@ public class RedisUtils {
* @param value
* @return 0表示第一位
*/
public Long zRank(String key, Object value) {
public static Long zRank(String key, Object value) {
return redisTemplate.opsForZSet().rank(key, value);
}
@@ -812,7 +815,7 @@ public class RedisUtils {
* @param value
* @return
*/
public Long zReverseRank(String key, Object value) {
public static Long zReverseRank(String key, Object value) {
return redisTemplate.opsForZSet().reverseRank(key, value);
}
@@ -824,7 +827,7 @@ public class RedisUtils {
* @param end 结束位置, -1查询所有
* @return
*/
public Set<String> zRange(String key, long start, long end) {
public static Set<Object> zRange(String key, long start, long end) {
return redisTemplate.opsForZSet().range(key, start, end);
}
@@ -836,7 +839,7 @@ public class RedisUtils {
* @param end
* @return
*/
public Set<ZSetOperations.TypedTuple<String>> zRangeWithScores(String key, long start,
public static Set<ZSetOperations.TypedTuple<Object>> zRangeWithScores(String key, long start,
long end) {
return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
}
@@ -849,7 +852,7 @@ public class RedisUtils {
* @param max 最大值
* @return
*/
public Set<String> zRangeByScore(String key, double min, double max) {
public static Set<Object> zRangeByScore(String key, double min, double max) {
return redisTemplate.opsForZSet().rangeByScore(key, min, max);
}
@@ -861,7 +864,7 @@ public class RedisUtils {
* @param max 最大值
* @return
*/
public Set<TypedTuple<String>> zRangeByScoreWithScores(String key,
public Set<TypedTuple<Object>> zRangeByScoreWithScores(String key,
double min, double max) {
return redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max);
}
@@ -874,7 +877,7 @@ public class RedisUtils {
* @param end
* @return
*/
public Set<TypedTuple<String>> zRangeByScoreWithScores(String key,
public static Set<TypedTuple<Object>> zRangeByScoreWithScores(String key,
double min, double max, long start, long end) {
return redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max,
start, end);
@@ -888,7 +891,7 @@ public class RedisUtils {
* @param end
* @return
*/
public Set<String> zReverseRange(String key, long start, long end) {
public static Set<Object> zReverseRange(String key, long start, long end) {
return redisTemplate.opsForZSet().reverseRange(key, start, end);
}
@@ -967,7 +970,7 @@ public class RedisUtils {
* @param max
* @return
*/
public Long zCount(String key, double min, double max) {
public static Long zCount(String key, double min, double max) {
return redisTemplate.opsForZSet().count(key, min, max);
}
@@ -977,7 +980,7 @@ public class RedisUtils {
* @param key
* @return
*/
public Long zSize(String key) {
public static Long zSize(String key) {
return redisTemplate.opsForZSet().size(key);
}
@@ -998,7 +1001,7 @@ public class RedisUtils {
* @param value
* @return
*/
public Double zScore(String key, Object value) {
public static Double zScore(String key, Object value) {
return redisTemplate.opsForZSet().score(key, value);
}
@@ -1010,7 +1013,7 @@ public class RedisUtils {
* @param end
* @return
*/
public Long zRemoveRange(String key, long start, long end) {
public static Long zRemoveRange(String key, long start, long end) {
return redisTemplate.opsForZSet().removeRange(key, start, end);
}
@@ -1022,7 +1025,7 @@ public class RedisUtils {
* @param max
* @return
*/
public Long zRemoveRangeByScore(String key, double min, double max) {
public static Long zRemoveRangeByScore(String key, double min, double max) {
return redisTemplate.opsForZSet().removeRangeByScore(key, min, max);
}
@@ -1034,7 +1037,7 @@ public class RedisUtils {
* @param destKey
* @return
*/
public Long zUnionAndStore(String key, String otherKey, String destKey) {
public static Long zUnionAndStore(String key, String otherKey, String destKey) {
return redisTemplate.opsForZSet().unionAndStore(key, otherKey, destKey);
}
@@ -1044,7 +1047,7 @@ public class RedisUtils {
* @param destKey
* @return
*/
public Long zUnionAndStore(String key, Collection<String> otherKeys,
public static Long zUnionAndStore(String key, Collection<String> otherKeys,
String destKey) {
return redisTemplate.opsForZSet()
.unionAndStore(key, otherKeys, destKey);
@@ -1058,7 +1061,7 @@ public class RedisUtils {
* @param destKey
* @return
*/
public Long zIntersectAndStore(String key, String otherKey,
public static Long zIntersectAndStore(String key, String otherKey,
String destKey) {
return redisTemplate.opsForZSet().intersectAndStore(key, otherKey,
destKey);
@@ -1072,7 +1075,7 @@ public class RedisUtils {
* @param destKey
* @return
*/
public Long zIntersectAndStore(String key, Collection<String> otherKeys,
public static Long zIntersectAndStore(String key, Collection<String> otherKeys,
String destKey) {
return redisTemplate.opsForZSet().intersectAndStore(key, otherKeys,
destKey);

View File

@@ -24,8 +24,6 @@ public class LoginServiceImpl implements LoginService {
@Autowired
private JwtUtils jwtUtils;
@Autowired
private RedisUtils redisUtils;
//token过期时间
private static final Integer TOKEN_EXPIRE_DAYS = 5;
//token续期时间
@@ -37,6 +35,7 @@ public class LoginServiceImpl implements LoginService {
* @param token
* @return
*/
@Override
public boolean verify(String token) {
Long uid = jwtUtils.getUidOrNull(token);
if (Objects.isNull(uid)) {
@@ -48,25 +47,26 @@ public class LoginServiceImpl implements LoginService {
}
@Async
@Override
public void renewalTokenIfNecessary(String token) {
Long uid = jwtUtils.getUidOrNull(token);
if (Objects.isNull(uid)) {
return;
}
String key = RedisKey.getKey(RedisKey.USER_TOKEN_STRING, uid);
long expireDays = redisUtils.getExpire(key, TimeUnit.DAYS);
long expireDays = RedisUtils.getExpire(key, TimeUnit.DAYS);
if (expireDays == -2) {//不存在的key
return;
}
if (expireDays < TOKEN_RENEWAL_DAYS) {//小于一天的token帮忙续期
redisUtils.expire(key, TOKEN_EXPIRE_DAYS, TimeUnit.DAYS);
RedisUtils.expire(key, TOKEN_EXPIRE_DAYS, TimeUnit.DAYS);
}
}
@Override
public String login(Long uid) {
String key = RedisKey.getKey(RedisKey.USER_TOKEN_STRING, uid);
String token = redisUtils.getStr(key);
String token = RedisUtils.getStr(key);
if (StrUtil.isNotBlank(token)) {
return token;
}