版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl

前置知识
在腾讯云服务器上安装Redis Stack前,需要清楚地知道容器和镜像。
镜像(Image) 是一个只读的软件模板,里面已经打包好了运行某个程序所需的文件、依赖和环境。比如,即将下载的redis/redis-stack-server:latest就是 Redis Stack Server 的镜像。
容器(Container) 是根据镜像创建出来的运行实例。也就是说,Docker 会以镜像为基础创建一个独立的运行环境,然后在里面启动 Redis Stack Server。
和 Java 类比也比较容易理解:镜像类似 Java 的"类";容器类似根据类创建出来的"对象"。当然这个类比并不完全严格,但非常适合理解二者的关系:一个镜像可以创建多个容器,就像一个类可以创建多个对象。
环境准备
首先,执行命令cat /etc/os-release确认操作系统版本;然后,再执行命令docker --version查看是否已经安装Docker;最后执行命令free -h查看服务器的内存和Swap使用情况;详情如下:
bash
[root@VM-0-13-opencloudos ~]# cat /etc/os-release
NAME="OpenCloudOS"
VERSION="9.4"
ID="opencloudos"
ID_LIKE="opencloudos"
VERSION_ID="9.4"
PLATFORM_ID="platform:oc9"
PRETTY_NAME="OpenCloudOS 9.4"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:opencloudos:opencloudos:9"
HOME_URL="https://www.opencloudos.org/"
BUG_REPORT_URL="https://bugs.opencloudos.tech/"
[root@VM-0-13-opencloudos ~]# docker --version
Docker version 28.0.1-20241223130549-3b49deb, build 3b49deb
[root@VM-0-13-opencloudos ~]# free -h
total used free shared buff/cache available
Mem: 3.5Gi 862Mi 285Mi 3.1Mi 2.6Gi 2.7Gi
Swap: 1.0Gi 6.0Mi 1.0Gi
[root@VM-0-13-opencloudos ~]#
图示如下:

从此处可以看出:通过以上三条命令可以确认,当前腾讯云服务器运行的是 OpenCloudOS 9.4,已经安装 Docker 28.0.1,因此后续部署 Redis Stack 无需再安装 Docker;服务器总内存约为 3.5GiB,当前可用内存约为 2.7GiB,并配置了 1GiB Swap,现有资源可以满足 Redis Stack 在学习和测试场景下的基本运行需求。
下载Redis Stack镜像
利用命令docker ps查看当前正在运行的 Docker 容器。如果 Docker 服务正常,它会返回容器列表;即使当前没有任何容器,也会正常显示表头;图示如下:

从命令执行结果可以看出:Docker 服务已经正常运行,只是当前没有正在运行的容器。
执行命令docker pull redis/redis-stack-server:latest下载Redis Stack Server镜像;图示如下:

至此,已经成功下载了最新版 redis/redis-stack-server 镜像。
接下来,执行命令docker images确认镜像是否已经存在;图示如下:

从上图可以看出,Redis Stack Server 镜像已经成功下载到腾讯云服务器,大小约为 520MB。hello-world 是服务器上原来已有的 Docker 测试镜像,与 Redis Stack 无关,可以暂时不用管。
先不要急着创建 Redis Stack 容器,先执行命令ss -lntp | grep 6379检查服务器的 6379 端口是否已经被其他 Redis 或程序占用,因为 Redis Stack 默认也使用这个端口;图示如下:

执行该命令后没有任何输出,说明服务器当前没有程序监听 TCP 6379 端口,因此后面可以把 Redis Stack 映射到这个端口。
到目前为止:Redis Stack 镜像已经下载完成,Docker 服务正常,6379 端口可用,因此下一步就可以创建并启动 Redis Stack 容器。
创建Redis Stack 容器
创建并启动 Redis Stack 容器;命令如下:
bash
docker run -d \
--name redis-stack-server \
-p 6379:6379 \
-v redis-stack-data:/data \
-e REDIS_ARGS="--requirepass YourStrongPassword" \
redis/redis-stack-server:latest
请把命令中的YourStrongPassword替换成你的密码比如abc123%%ABC
图示如下:

执行该命令后得到表示Docker 容器 ID。它说明 Docker 已经根据 Redis Stack 镜像成功创建了 redis-stack-server 容器,并发出了后台启动指令。继续执行命令docker ps检查容器当前状态;图示如下:

从输出可以看出,redis-stack-server 容器已经正常运行,STATUS 为 Up 2 minutes;同时端口映射为 0.0.0.0:6379->6379/tcp,说明服务器的 6379 端口已经映射到容器中的 Redis Stack 服务。
最后,通过命令验证 Redis Stack 服务本身是否能够正常响应;命令如下:
bash
docker exec -it redis-stack-server redis-cli -a 'YourStrongPassword'
比如:
bash
docker exec -it redis-stack-server redis-cli -a 'abc123%%ABC'

继续执行命令PING;图示如下:

从上图可以看出,执行PING后返回PONG,说明 Redis Stack 服务已经正常运行。
继续执行命令MODULE LIST;结果如下:
bash
[root@VM-0-13-opencloudos ~]# docker exec -it redis-stack-server redis-cli -a 'abc123%%ABC'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> MODULE LIST
1) 1) "name"
2) "ReJSON"
3) "ver"
4) (integer) 20809
5) "path"
6) "/opt/redis-stack/lib/rejson.so"
7) "args"
8) (empty array)
2) 1) "name"
2) "timeseries"
3) "ver"
4) (integer) 11206
5) "path"
6) "/opt/redis-stack/lib/redistimeseries.so"
7) "args"
8) (empty array)
3) 1) "name"
2) "search"
3) "ver"
4) (integer) 21020
5) "path"
6) "/opt/redis-stack/lib/redisearch.so"
7) "args"
8) 1) "MAXSEARCHRESULTS"
2) "10000"
3) "MAXAGGREGATERESULTS"
4) "10000"
4) 1) "name"
2) "bf"
3) "ver"
4) (integer) 20816
5) "path"
6) "/opt/redis-stack/lib/redisbloom.so"
7) "args"
8) (empty array)
5) 1) "name"
2) "redisgears_2"
3) "ver"
4) (integer) 20020
5) "path"
6) "/opt/redis-stack/lib/redisgears.so"
7) "args"
8) 1) "v8-plugin-path"
2) "/opt/redis-stack/lib/libredisgears_v8_plugin.so"
6) 1) "name"
2) "RedisCompat"
3) "ver"
4) (integer) 1
5) "path"
6) "/opt/redis-stack/lib/rediscompat.so"
7) "args"
8) (empty array)
127.0.0.1:6379>
从 MODULE LIST 的输出可以看出 Redis Stack的相关模块,比如 Spring AI 2.0 的 Redis 对话记忆所依赖的两项主要能力ReJSON。
现在,执行exit命令退出redis-cli;图示如下:

开放6379 端口
退出 redis-cli 后,先检查服务器自身的防火墙状态,命令如下:
bash
firewall-cmd --state
图示如下:

执行结果说明 阿里云服务器上的 firewalld 当前没有运行。也就是说,服务器本机这一层目前没有通过 firewalld 对 6379 端口进行拦截。
首先,请找到云服务器的防火墙配置模块;图示如下:

添加规则,图示如下:

请特别注意来源的填写,固定格式为:公网 IPv4 + /32,表示允许哪个IP访问Redis Stack。此处,为了方便测试我填写了自己的电脑的公网IP。
各位小伙伴可以在DOS中执行命令nslookup myip.opendns.com resolver1.opendns.com获取自己的公网IP;图示如下:

添加完毕,图示如下:

为了验证,请在自己的 Windows 电脑上测试能否正常访问腾讯云服务器的6379 端口。请在DOS中输入以下命令:
bash
powershell -Command "Test-NetConnection 你的云服务器IP -Port 6379"
例如:
bash
powershell -Command "Test-NetConnection 43.136.136.231 -Port 6379"
图示如下:

至此,我们已经成功实现了本地windows电脑到云端服务器6379端口的访问。
查看Redis Stack中的数据
输入如下命令进入redis-cli;
bash
docker exec -it redis-stack-server redis-cli --raw

再执行命令AUTH 你的Redis密码进行认证,认证图示如下:

然后,执行命令扫描Redis的键;命令如下:
bash
SCAN 0 MATCH chat-memory:* COUNT 100
该用于逐步扫描Redis中的键,并筛选名称以chat-memory:开头的键。COUNT 100表示建议每次扫描约100个键,用于查找Spring AI写入的对话记忆数据。图示如下:

接下来,执行命令查看用户id为u123的对话记录,命令如下:
bash
FT.SEARCH chat-memory-idx '@conversation_id:{u123}' LIMIT 0 100
命令执行结果如下:
