提交 376cdb94 作者: obcy

【fix-自动拆箱引起的空指针】

上级 58b3f919
...@@ -867,7 +867,7 @@ public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> impl ...@@ -867,7 +867,7 @@ public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> impl
//防止重复 //防止重复
if (redisUtil.hasKey(Constants.HISTORY_SUBJECT_DATE_QUEUE + subject.getSubjectCode())) { if (redisUtil.hasKey(Constants.HISTORY_SUBJECT_DATE_QUEUE + subject.getSubjectCode())) {
newDateList.forEach(e -> { newDateList.forEach(e -> {
redisUtil.lRemove(Constants.HISTORY_SUBJECT_DATE_QUEUE + subject.getSubjectCode(), 1, e); redisUtil.lRemove(Constants.HISTORY_SUBJECT_DATE_QUEUE + subject.getSubjectCode(), 0, e);
}); });
} }
redisUtil.rpushMultipleValues(Constants.HISTORY_SUBJECT_DATE_QUEUE + subject.getSubjectCode(), newDateList.toArray(new String[0])); redisUtil.rpushMultipleValues(Constants.HISTORY_SUBJECT_DATE_QUEUE + subject.getSubjectCode(), newDateList.toArray(new String[0]));
......
package com.zzsn.event.util; package com.zzsn.event.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.RedisSystemException;
import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -15,6 +17,7 @@ import java.util.concurrent.TimeUnit; ...@@ -15,6 +17,7 @@ import java.util.concurrent.TimeUnit;
* redis 工具类 * redis 工具类
*/ */
@Component @Component
@Slf4j
public class RedisUtil { public class RedisUtil {
@Autowired @Autowired
...@@ -533,18 +536,38 @@ public class RedisUtil { ...@@ -533,18 +536,38 @@ public class RedisUtil {
} }
/** /**
* 移除N个值为value * 从 Redis 列表中移除与指定值匹配的元素
* *
* @param key 键 * @param key Redis 列表的键
* @param count 移除多少个 * @param count 移除方式:
* @param value 值 * count > 0: 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
* @return 移除的个数 * count < 0: 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
* count = 0: 移除表中所有与 VALUE 相等的值
* @param value 要匹配的元素值
* @return 被移除元素的数量,若操作失败则返回 0
*/ */
public long lRemove(String key, long count, Object value) { public long lRemove(String key, long count, Object value) {
if (key == null || key.isEmpty()) {
log.error("移除列表元素失败,键不能为空");
return 0;
}
if (redisTemplate == null) {
log.error("RedisTemplate 未初始化,无法执行列表移除操作");
return 0;
}
try { try {
return redisTemplate.opsForList().remove(key, count, value); Long result = redisTemplate.opsForList().remove(key, count, value);
return result != null ? result : 0;
} catch (RedisSystemException e) {
log.error("Redis 系统异常,移除列表元素失败。键: {}, 计数: {}, 值: {}", key, count, value, e);
return 0;
} catch (IllegalArgumentException e) {
log.error("非法参数异常,移除列表元素失败。键: {}, 计数: {}, 值: {}", key, count, value, e);
return 0;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("未知异常,移除列表元素失败。键: {}, 计数: {}, 值: {}", key, count, value, e);
return 0; return 0;
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论