我有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)。
我该怎么做?
答案 0 :(得分:1)
Redis XTRIM命令正是用于这种计划作业的。 [How to Xtrim (trim redis stream) in the safe way线程已经讨论了一些解决方案