diff --git a/src/main/java/com/njcn/middle/stream/support/StreamTrimScheduler.java b/src/main/java/com/njcn/middle/stream/support/StreamTrimScheduler.java index f5eb03c..2486b5e 100644 --- a/src/main/java/com/njcn/middle/stream/support/StreamTrimScheduler.java +++ b/src/main/java/com/njcn/middle/stream/support/StreamTrimScheduler.java @@ -4,10 +4,8 @@ import com.njcn.middle.stream.autoconfig.RedisStreamProperties; import com.njcn.middle.stream.handler.EnhanceStreamConsumerHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.context.SmartLifecycle; -import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.StringRedisTemplate; -import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; @@ -20,7 +18,8 @@ import java.util.concurrent.TimeUnit; * 定时裁剪 stream 长度,防止无界增长。 * *

按 {@code trim.intervalMs} 周期对每个 handler 的 stream 执行 - * {@code XTRIM MAXLEN ~ }({@code ~} 近似裁剪,性能更好)。 + * {@code XTRIM MAXLEN }(精确裁剪,经 spring-data 高级 API; + * 2.3.x 无近似裁剪重载,故不用 {@code ~})。 * *

无 handler 时不启动。正确性由 C11 集成测试覆盖。 */ @@ -81,11 +80,7 @@ public class StreamTrimScheduler implements SmartLifecycle { long maxlen = props.getTrim().getMaxlen(); for (String stream : distinctStreams()) { try { - redis.opsForStream().trim(stream,maxlen); -// redis.execute((RedisCallback) connection -> connection.execute("XTRIM", -// stream.getBytes(StandardCharsets.UTF_8), -// "MAXLEN".getBytes(StandardCharsets.UTF_8), -// String.valueOf(maxlen).getBytes(StandardCharsets.UTF_8))); + redis.opsForStream().trim(stream, maxlen); } catch (Exception e) { log.warn("[redis-stream] trim failed stream={}", stream, e); }