1.添加redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置配置文件.yml
spring:
data:
redis:
# Redis 服务器地址
host: localhost
# Redis 服务器端口
port: 6379
# 如果你设置了密码,填在这里(默认通常没有密码,可留空)
# spring.data.redis.password=123456
# 数据库索引(默认为0)
database: 0
3.启动redis,编写RedisChatMemoryStore类,实现了ChatMemoryStore接口:

@Component
public class RedisChatMemoryStore implements ChatMemoryStore {
private final StringRedisTemplate redisTemplate;
// 定义一个 Key 前缀,防止和其他 Redis 数据冲突
private static final String KEY_PREFIX = "chat:memory:";
// 定义数据过期时间,例如 7 天后自动删除闲置的聊天记录
private static final Duration TTL = Duration.ofDays(7);
public RedisChatMemoryStore(StringRedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public List<ChatMessage> getMessages(Object memoryId) {
// 1. 拼接 Key
String key = KEY_PREFIX + memoryId;
// 2. 从 Redis 获取 JSON 字符串
String json = redisTemplate.opsForValue().get(key);
// 3. 如果为空,返回空列表;否则反序列化
if (json == null || json.isEmpty()) {
return new ArrayList<>();
}
return messagesFromJson(json);
}
@Override
public void updateMessages(Object memoryId, List<ChatMessage> messages) {
String key = KEY_PREFIX + memoryId;
String json = messagesToJson(messages);
// 4. 保存到 Redis,并设置过期时间
// set(key, value, timeout)
redisTemplate.opsForValue().set(key, json, TTL);
}
@Override
public void deleteMessages(Object memoryId) {
String key = KEY_PREFIX + memoryId;
redisTemplate.delete(key);
}
}
4.工厂类中在创建ChatMemory时添加上ChatMemoryStore属性:
@Bean
public AiCodeHelperService aiCodeHelperService(){
ChatMemory chatMemory=MessageWindowChatMemory.builder()
.chatMemoryStore(redisChatMemoryStore)
.id("rance-global")
.maxMessages(10)
.build();
AiCodeHelperService build = AiServices.builder(AiCodeHelperService.class)
.chatMemory(chatMemory)
.chatModel(qwenChatModel)
.build();
return build;
}
5.测试即可
