一、引入依赖
Java 操作 redis 的客户端有很多. 其中最知名的是 jedis.
创建 maven 项目, 把 jedis 的依赖拷贝到 pom.xml 中
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.2.0</version>
</dependency>
二、配置端口转发
从 Windows 开发机访问 Linux 云服务器 Redis 的实现逻辑:
一、连接需求背景
我们在 Windows 开发机(IDE 写 Java 代码) 想操作 Linux 云服务器上的 Redis,但直接访问有网络障碍:
- 云服务器 Redis 默认限制:Redis 端口(如 6379)被防火墙保护,无法直接通过公网访问(否则易被黑客入侵)。
- 本地网络特性:Windows 开发机是内网环境(类似小区住宅,被 NAT 保护),无法直接暴露给公网
核心需求:安全访问云服务器 Redis,同时不暴露 Redis 端口到公网。
二、核心问题与矛盾
直接开放 Redis 端口到公网 ≈ “给服务器开大门”,风险极高(Redis 无复杂认证时,黑客可暴力破解)。但开发又需要从 Windows 访问,形成矛盾:
三、解决方案原理:SSH 端口转发(跳板机制)
利用 SSH 协议的端口转发功能,把云服务器的 Redis 端口(如 6379)映射到本地 Windows 的某个端口(如 8888),实现 “间接访问”
- 类比:SSH 是 “安全通道”,把云服务器的 Redis 端口 “搬” 到本地,Windows 访问
127.0.0.1:8888
≈ 访问云服务器的6379
。
完整流程拆解(结合流程图)
以下按 准备 → 配置 → 验证 → 开发 步骤,配合流程图详细说明
1. 环境准备
- 角色:
- Windows 开发机(内网,运行 IDE、SSH 客户端)
- Linux 云服务器(公网 IP,运行 Redis、SSH 服务端)
- 前提:
- 云服务器已安装 Redis(默认端口 6379,需配置
bind 0.0.0.0
和protected-mode no
允许内网访问) - Windows 可通过 SSH 客户端(如 XShell)连接云服务器
- 云服务器已安装 Redis(默认端口 6379,需配置
2. SSH 端口转发配置(关键步骤)
通过 SSH 客户端(如 XShell)配置 本地端口转发,把云服务器的 6379
映射到 Windows 的 8888
:
3. 验证端口转发是否生效
Windows 的控制台执行命令:
netstat -ano | findstr 8888
→ 说明本地 8888 端口已被 SSH 客户端监听,转发规则生效。
4. Java 代码连接(开发阶段)
通过 Jedis
连接 本地映射端口 8888,间接操作云服务器 Redis:
public static void main(String[] args) {
// 连接池指向本地 8888(实际映射到云服务器 6379)
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
try (Jedis jedis = jedisPool.getResource()) {
// 测试连接(Redis 会返回 PONG)
String pong = jedis.ping();
System.out.println("Redis 响应: " + pong);
}
}
在 Jedis 中使用 tcp://
前缀是因为 Redis 是基于 TCP 协议 进行通信的,这是 Jedis 连接字符串的标准格式。