历史文章
Spring AI:对接DeepSeek实战
Spring AI:对接官方 DeepSeek-R1 模型 ------ 实现推理效果
Spring AI:ChatClient实现对话效果
Spring AI:使用 Advisor 组件 - 打印请求大模型出入参日志
Spring AI:ChatMemory 实现聊天记忆功能
Spring AI:本地安装 Ollama 并运行 Qwen3 模型
Spring AI:提示词工程
Spring AI:提示词工程 - Prompt 角色分类(系统角色与用户角色)
Spring AI:基于 "助手角色" 消息实现聊天记忆功能
Spring AI:结构化输出 - 大模型响应内容
Spring AI:Docker 安装 Cassandra 5.x(限制内存占用)&& CQL
Spring AI:整合 Cassandra - 实现聊天消息持久化
Spring AI:多模态 AI 大模型
Spring AI:文生图:调用通义万相 AI 大模型
Spring AI:文生音频 - cosyvoice-V2
Spring AI:文生视频 - wanx2.1-i2v-plus
Spring AI:上手体验工具调用(Tool Calling)
Spring AI:整合 MCP Client - 调用高德地图 MCP 服务
Spring AI:搭建自定义 MCP Server:获取 QQ 信息
Spring AI:对接自定义 MCP Server
Spring AI:RAG 增强检索介绍

本文中,我们尝试在本地环境中,将向量数据库搭建好。查阅 Spring AI 官方文档,可以知道框架支持哪些向量数据库,如下图所示:

最终选型 Redis 来作为向量数据库,不过,由于原生的 Redis 并不支持存储向量,需要安装 Redis Stack。
什么是 Redis Stack?
Redis Stack 是 Redis 的一个增强发行版, 它除了包含开源版本的 Redis 核心功能外,并预集成了几个强大的、官方开发和维护的 Redis 模块以及一个 RedisInsight 可视化工具,你可以理解为它是 Redis + 官方精选高级功能全家桶。
其额外添加的功能特性如下:
RedisSearch:
- 功能: 在 Redis 数据上构建全文搜索和二级索引, 支持向量存储。
- 特性: 文本搜索(支持词干提取、停用词、同义词)、模糊匹配、聚合、分面搜索、排序、地理空间查询、向量相似性搜索(KNN)。
- 价值: 无需额外维护 Elasticsearch/Solr,直接在 Redis 数据上实现强大的搜索功能。
RedisJSON:
- 功能: 提供原生 JSON 数据类型和相关操作命令。
- 特性: 高性能读写、JSONPath 支持、原子操作、与 RedisSearch 无缝集成(可索引 JSON 文档中的字段)。
- 价值: 简化存储和处理 JSON 文档,非常适合现代应用和文档型数据模型。
RedisTimeSeries:
- 功能: 专门为时间序列数据(如指标、监控、物联网传感器数据)设计。
- 特性: 高效压缩存储、按时间范围查询、聚合(求和、平均、最小值、最大值等)、下采样、规则(自动聚合)、与 Prometheus 集成。
- 价值: 高性能存储和分析时间序列数据,替代或补充 InfluxDB、Prometheus 等。
RedisGraph:
- 功能: 使用 Cypher 查询语言实现属性图数据库功能。
- 特性: 存储节点(实体)和关系(连接),支持复杂的关系查询、图遍历算法。
- 价值: 处理高度连接的数据(社交网络、推荐引擎、欺诈检测)。
RedisInsight:
- 功能: Redis 的图形化管理、监控和开发工具。
- 特性: 可视化管理键和数据、执行命令、查看慢查询、分析内存使用、监控性能指标、管理 Redis Stack 的特定功能(如索引、图查询)。
- 价值: 极大地简化了 Redis 的管理、调试和开发工作。
下载镜像
接下来,我们将使用 Docker 来搭建本地 Redis Stack 环境。
下载 redis-stack:7.2.0-v18 版本的 Redis Stack 镜像:
java
docker pull redis/redis-stack:7.2.0-v18
TIP:
- 当前下载的 redis/redis-stack 镜像,它包含 Redis Stack 服务器和 RedisInsight 可视化工具,适合本地开发使用。
- 另外,我们也可以下载 redis/redis-stack-server 镜像,它仅提供 Redis Stack 服务器,不包含 RedisInsight 可视化工具,适合生产环境部署,能够节省系统资源占用。
准备挂载文件夹
接下来,我们在 E:\docker 目录下,创建一个 /redis-stack 文件夹,并在里面再单独新建两个文件夹,如下图所示:


1、/conf : 用于挂载容器内 Redis Stack 的配置文件;
2、/data : 用于挂载容器内 Redis Stack 的数据;
创建配置文件
然后,进入到 /conf 文件夹中,新建一个 redis-stack.conf 配置文件:

添加配置项如下:
java
port 6379
daemonize no
loadmodule /opt/redis-stack/lib/rediscompat.so
loadmodule /opt/redis-stack/lib/redisearch.so
loadmodule /opt/redis-stack/lib/redistimeseries.so
loadmodule /opt/redis-stack/lib/rejson.so
loadmodule /opt/redis-stack/lib/redisbloom.so
loadmodule /opt/redis-stack/lib/redisgears.so v8-plugin-path /opt/redis-stack/lib/libredisgears_v8_plugin.so
解释一下上述各项配置的作用:
- port 6379:指定 Redis 服务器监听的网络端口号。6379 是 Redis 的默认端口。客户端(应用程序、命令行工具 redis-cli 等)需要通过这个端口来连接 Redis 服务器。你可以根据需要修改它(例如,为了安全或在同一台机器上运行多个 Redis 实例时使用不同端口)。
- daemonize no:控制 Redis 服务器是否以守护进程(daemon)方式运行。设置为 no , 会将 Redis 以前台方式运行,并将日志直接输出到启动它的控制台。
- loadmodule /opt/redis-stack/lib/rediscompat.so: 加载 Redis Stack 的兼容性模块, 作用是为了提供与旧版 Redis 协议(RESP2)的兼容性支持。
- loadmodule /opt/redis-stack/lib/redisearch.so: 加载 RediSearch 模块,它提供了强大的全文搜索、二级索引和查询引擎功能。
- loadmodule /opt/redis-stack/lib/redistimeseries.so:加载 RedisTimeSeries 模块。它提供了专门用于高效存储、查询和聚合时间序列数据的功能。
- loadmodule /opt/redis-stack/lib/rejson.so:加载 RedisJSON 模块,提供原生 JSON 支持;
- loadmodule /opt/redis-stack/lib/redisbloom.so:加载 RedisBloom 模块,让 Redis 支持布隆过滤器,它是一种概率性数据结构,用于解决大数据量场景下的特定问题;
- loadmodule /opt/redis-stack/lib/redisgears.so v8-plugin-path /opt/redis-stack/lib/libredisgears_v8_plugin.so: 加载 RedisGears 模块,同时指定其 JavaScript (V8) 引擎插件的位置。用于提供可编程的数据处理管道。
运行容器
执行如下命令,将 Redis Stack 容器跑起来:
java
docker run -d \
-p 6379:6379 \
-p 8001:8001 \
-v E:\docker\redis-stack\data:/data \
-v E:\docker\redis-stack\conf\redis-stack.conf:/etc/redis-stack.conf \
--name redis-stack \
redis/redis-stack:7.2.0-v18
Windows 系统中,需要放置在一行中来执行,去除掉 \ 斜杠后,整体命令如下:
java
docker run -d -p 6379:6379 -p 8001:8001 -v E:\docker\redis-stack\data:/data -v E:\docker\redis-stack\conf\redis-stack.conf:/etc/redis-stack.conf --name redis-stack redis/redis-stack:7.2.0-v18
解释一下上述命令中,各项参数的作用:
- -d: 在后台运行容器(daemon 模式)。
- -p 6379:6379:将宿主机的 6379 端口映射到容器的 6379 端口,作用是允许通过 localhost:6379 访问容器内的 Redis 服务。
- p 8001:8001:将宿主机的 8001 端口映射到容器的 8001 端口,作用是提供对 RedisInsight 的访问。RedisInsight 是 Redis Stack 的图形化管理工具,通过浏览器访问 http://localhost:8001 使用。
- -v E:\docker\redis-stack\data:/data: 将宿主机目录 E:\docker\redis-stack\data 挂载到容器的 /data 目录,作用是确保 Redis 数据在容器重启/删除后不丢失。
- -v E:\docker\redis-stack\conf\redis-stack.conf:/etc/redis-stack.conf :将宿主机配置文件映射到容器内的默认配置位置,作用是使用自定义的配置文件来启动 Redis Stack。
- --name redis-stack: 将容器命名为 redis-stack。
- redis/redis-stack:7.2.0-v18: 指定通过哪个镜像来启动容器。
命令执行完毕后,可通过 docker ps 命令,来确认 Redis Stack 容器是否运行成功了。
访问 RedisInsight 可视化控制台
Redis Stack 容器运行成功,在浏览器中访问地址 http://localhost:8001 ,进入到 RedisInsight 可视化控制台,如下图所示:

安装 Redis 图形客户端
也可单独安装一个 Redis 图像化操作客户端来操作 Redis 。这里推荐 Another Redis Desktop Manager , 安装包下载地址:https://github.com/qishibo/AnotherRedisDesktopManager/releases ,如下图所示,点击下载对应系统的安装包:

安装成功后,运行客户端,点击右上角新建连接按钮:

填写本地 Redis Stack 的连接地址、端口、连接名称,点击确定。至于用户名、密码,由于并没有配置,所以不用填写:

连接新建完成后,点击左侧栏上方的控制台图标,可以打开控制台,在最下方填写相关命令,如 set key value , 提示 OK , 说明操作成功了,即可在左侧列表中看到新添加的 key , 添加对应的 key 即可查看 value 值 。