如何清除Redis流中的记录,仅保留N个最新记录?

时间:2020-04-10 13:43:58

标签: java spring spring-boot redis

我有SpringBoot应用程序,微服务在其中发送和接收来自Redis流的一些数据。因此,每个服务发送的记录都是Map:

StringRedisTemplate redisTemplate = new StringRedisTemplate();
Map<String, String> recordMap = new HashMap<>();
recordMap.put("topic", "topicName");
recordMap.put("user", "John");
recordMap.put("somethingElse", "someData");
redisTemplate.opsForStream().add(
            StreamRecords.newRecord()
                .in("name_of_stream")
                .ofMap(recordMap)))

其他服务有

public class RedisMessagesListener implements StreamListener<String, MapRecord<String, String, String>>
在Redis中的每条消息上触发的

会在记录中查找“主题”值,并需要一些人员。

问题在于,记录一旦发送到Redis Stream,便始终由Redis存储。

我要在Java中创建@Scheduled方法吗?
我需要删除某些主题的旧记录,仅保留N条最新记录(例如1000000)。
我该怎么做?

1 个答案:

答案 0 :(得分:1)

Redis XTRIM命令正是用于这种计划作业的。 [How to Xtrim (trim redis stream) in the safe way线程已经讨论了一些解决方案