package com.xly.config; import dev.langchain4j.data.message.ChatMessage; import dev.langchain4j.data.message.ChatMessageDeserializer; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * 旧版消息记忆({@code chat:mem:{convId}})的**遗留只读**兼容层。 * *

事实源已迁移到事件日志({@link com.xly.service.LedgerService},{@code chat:ledger:}), * 本类不再写入:只保留旧会话的历史兼容读取与删除级联,30 天 TTL 到期后自然淘汰,届时可整体删除。 */ @Component public class RedisChatMemoryStore { private static final String PREFIX = "chat:mem:"; private final StringRedisTemplate redis; public RedisChatMemoryStore(StringRedisTemplate redis) { this.redis = redis; } public List getMessages(Object memoryId) { String json = redis.opsForValue().get(PREFIX + memoryId); if (json == null || json.isBlank()) { return new ArrayList<>(); } return ChatMessageDeserializer.messagesFromJson(json); } public boolean exists(Object memoryId) { try { return Boolean.TRUE.equals(redis.hasKey(PREFIX + memoryId)); } catch (Exception e) { return true; // 读失败时不误判为「可清理」 } } public void deleteMessages(Object memoryId) { redis.delete(PREFIX + memoryId); } }