Spring AI Alibaba Redis 记忆模块配置踩坑记录
Spring AI Alibaba Redis集群 记忆模块配置踩坑记录
引子
官方文档写的是
spring.ai.memory.redis.*,但我配了之后 IDE 报黄……
最近在做 AI 对话历史持久化,想用 Redis 存聊天记忆。Spring AI Alibaba 提供了 spring-ai-alibaba-starter-memory-redis 模块,看起来很美。
结果看官方文档(GitHub main 分支)配了一通,IDE 里全是黄色警告——后来才发现,官方文档是最新版 API,而我用的 1.0.0.2 版本还没支持这些配置项。
如果你也遇到了同样的问题,下面分享我摸索出的方案。
一、想用 Redis 存 AI 聊天记忆?pom.xml 加这些
<!-- Spring Data Redis(连接基础) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Spring AI Alibaba Redis 记忆模块 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-memory-redis</artifactId>
</dependency>
<!-- Jedis 客户端(也可以用 Lettuce) -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
二、配置:
📖 官方文档写法(适用于最新版,低版本可能不生效)
spring:
ai:
memory:
redis:
mode: cluster
client-type: jedis
cluster:
nodes: ...
这是 GitHub main 分支上的写法,如果你的版本较新可以直接用。但我用的是 1.0.0.2,IDE 报 mode、client-type 属性不存在——版本没跟上文档。
✅ 低版本实际能用的(集群模式)
spring:
data:
redis:
password: ${REDIS_PASSWORD}
cluster:
nodes:
- your-redis-ip:7001
- your-redis-ip:7002
- your-redis-ip:7003
- your-redis-ip:7004
- your-redis-ip:7005
- your-redis-ip:7006
✅ 低版本实际能用的(单机模式——培训班常用)
spring:
data:
redis:
host: localhost
port: 6379
password: 你的密码
核心规律:Spring Data Redis 会根据配置自动判断模式——配了 host:port 就是单机,配了 cluster.nodes 就是集群。 不需要额外声明。
💡 补充:为什么有两种写法?
官方 GitHub 文档写的是 spring.ai.memory.redis.mode: cluster,但这是最新版 main 分支的 API。1.0.0.2 版本还没实现这个配置解析,所以 IDE 报属性不存在。
等到以后升级了版本,可以切回官方写法:
spring:
ai:
memory:
redis:
mode: cluster # 官方新版写法
client-type: jedis
cluster:
nodes: ...
而 spring.data.redis.cluster.nodes 是 Spring Data Redis 的底层配置,所有版本通用。两个都能连集群,只是配置层级不同——一个走 AI 模块专用通道,一个走 Spring 底层通道。 当前建议用后者,兼容性最好。
三、Java 代码里怎么用
import com.alibaba.cloud.ai.memory.redis.RedisChatMemoryRepository;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
@Bean(name = "deepseekChatClient")
public ChatClient deepseekChatClient(ChatModel deepseekModel,
RedisChatMemoryRepository redisChatMemoryRepository) {
// 创建滑动窗口记忆(最近 200 条)
var windowChatMemory = MessageWindowChatMemory
.builder().maxMessages(200)
.chatMemoryRepository(redisChatMemoryRepository)
.build();
return ChatClient.builder(deepseekModel)
.defaultAdvisors(MessageChatMemoryAdvisor.builder(windowChatMemory).build())
.defaultOptions(ChatOptions.builder().model("deepseek-v4-pro").build())
.build();
}
注意参数类型: 完整 import 路径如下:
import com.alibaba.cloud.ai.memory.redis.RedisChatMemoryRepository;
Jedis 6.x 构造器陷阱: 密码不能直接放中间参数,用 (nodes, null, password) 形式:
// Jedis 6.x 正确写法
JedisCluster jedisCluster = new JedisCluster(nodes, null, password);
// (节点集合, 用户名, 密码) — 没配ACL用户名为null
很多旧教程是 new JedisCluster(nodes, 5000, 5000, 3, password, poolConfig),那是 Jedis 3.x/4.x 的 API,Jedis 6.x 上不存在这个构造器,编译直接报错。
四、验证是否成功
启动项目后,问 AI 一句 “你好”,再问 “我刚才说了什么?”
如果 AI 回答 “你说了你好”,那就成功了。并且重启项目后依然能记起来——因为数据已经存在 Redis 里了。
可以用 Redis CLI 验证数据:
# 登录 Redis
redis-cli -a 你的密码
# 查看 AI 记忆的 key
keys chat:memory:*
# 查看某次对话的内容
hgetall chat:memory:你的会话ID
测试成功!

五、总结
| 坑 | 表现 | 解决 |
|---|---|---|
官方文档写了 spring.ai.memory.redis.client-type |
IDE 报黄,属性不存在 | 确认模块版本是否支持;或用 spring.data.redis.* 代替 |
import 用了 BaseRedisChatMemoryRepository |
IDEA 找不到类 | 改成 RedisChatMemoryRepository |
忘了加 spring-boot-starter-data-redis |
Redis 连不上 | 加上这个依赖 |
集群用了 host:port |
只连了一个节点 | 换成 cluster.nodes 列表 |
一句话:spring-ai-alibaba-starter-memory-redis 只管"把对话存到 Redis"的逻辑,不管"怎么连 Redis"。连接配置交给 spring.data.redis.* 就好。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)