Jedis 原生之道:Redis 命令 Java 实现指南(一)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:Redis

📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。

在这里插入图片描述

Redis Java使用 样例 列表

一、引入依赖

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.0protected-mode no 允许内网访问)
    • Windows 可通过 SSH 客户端(如 XShell)连接云服务器

2. SSH 端口转发配置(关键步骤)

通过 SSH 客户端(如 XShell)配置 本地端口转发,把云服务器的 6379 映射到 Windows 的 8888

在这里插入图片描述

配置操作(以 XShell 为例)

  • 新建 SSH 会话,连接云服务器。
  • 会话属性 → 连接 → SSH → 隧道 → 添加转发规则:
    • 源主机:127.0.0.1(本地回环地址)
    • 源端口:8888(本地监听端口)
    • 目标主机:127.0.0.1(云服务器内访问 Redis,因 Redis 绑定 0.0.0.0
    • 目标端口:6379(Redis 实际端口)

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 连接字符串的标准格式。具体原因如下:

1. Redis 底层通信基于 TCP
  • Redis 服务器默认监听 TCP 端口(如 6379),客户端与服务器通过 TCP 套接字 进行通信。
  • Jedis 作为 Redis 的 Java 客户端,本质上是通过 TCP 协议 发送 Redis 命令并接收响应。
2. Jedis 连接字符串格式

Jedis 支持两种方式指定连接地址:

方式一:标准 URL 格式(推荐)
// 使用 "tcp://" 前缀明确指定 TCP 协议
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
  • tcp:// 前缀:显式声明使用 TCP 协议连接 Redis。

  • 优势:支持完整的 URL 语法,可包含用户名、密码、数据库索引等参数,例如:

    // 带认证和数据库选择的完整 URL
    JedisPool pool = new JedisPool("redis://user:password@host:port/0");
    
方式二:传统参数方式
// 等价写法,不使用 URL 格式
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
  • 本质:内部仍通过 TCP 连接,只是省略了 tcp:// 前缀。
3. 为什么需要 tcp://
  • 明确协议类型

    :Redis 也可通过 Unix Socket 通信(需使用unix://前缀),例如:

    // 通过 Unix Socket 连接(本地服务器专用)
    JedisPool pool = new JedisPool("unix:///path/to/redis.sock");
    
  • 兼容性:URL 格式更灵活,支持未来扩展(如 SSL/TLS 加密连接,使用 rediss:// 前缀)。

4. 常见误区
  • 误以为 Redis 用 HTTP:Redis 协议是自定义的二进制协议(RESP),不基于 HTTP,因此不能用 http:// 前缀。
  • 省略前缀是否可行:对于 TCP 连接,tcp:// 可省略,但建议保留以提高代码可读性。
5.总结

JedisPool("tcp://127.0.0.1:8888") 中的 tcp:// 是为了:

  1. 明确指定使用 TCP 协议 连接 Redis。
  2. 遵循 Jedis 的 URL 连接字符串规范。
  3. 与其他协议(如 Unix Socket、SSL)的连接方式统一语法。

等价写法对比

// 推荐:显式指定 TCP 协议
JedisPool pool1 = new JedisPool("tcp://localhost:6379");

// 等价:省略 tcp:// 前缀
JedisPool pool2 = new JedisPool("localhost", 6379);

两者效果完全相同,但使用 tcp:// 可让代码更清晰地表达 “通过 TCP 协议连接 Redis” 的意图。

在这里插入图片描述

5. 生产环境注意事项

开发阶段通过 SSH 转发调试后,生产环境需调整连接逻辑

  • Java 程序直接部署到云服务器时,连接地址改为 localhost:6379(无需端口转发)。
  • 若需公网访问,应通过 Redis 安全配置(如密码、IP 白名单)替代直接开放端口。

五、关键配置与避坑点

  1. Redis 服务器配置(云服务器)

    • 修改 redis.conf
    bind 0.0.0.0       # 允许所有IP访问(或指定云服务器内网IP)
    protected-mode no  # 关闭保护模式(否则跨主机无法访问)
    requirepass yourpassword  # 建议设置密码,增强安全
    
    • 重启 Redis 生效:service redis-server restart

    2.SSH 转发的 “临时性”

  • SSH 连接断开后,端口转发自动失效。需保持 SSH 会话连接(或配置后台运行)。

    3.端口冲突问题

  • 本地 8888 端口若被占用,需换其他端口(如 8889),并同步修改代码和 SSH 转发规则。

  • Redis服务未启动在这里插入图片描述

六、总结:安全访问云服务器 Redis 的完整链路

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值