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

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

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

在这里插入图片描述

Redis

  • Redis Java使用 样例 列表
    • 一、引入依赖
    • 二、配置端口转发
  • 从 Windows 开发机访问 Linux 云服务器 Redis 的实现逻辑:
    • 一、连接需求背景
    • 二、核心问题与矛盾
    • 三、解决方案原理:SSH 端口转发(跳板机制)
    • 四、完整流程拆解(结合流程图)
      • 1. 环境准备
      • 2. SSH 端口转发配置(关键步骤)
      • 3. 验证端口转发是否生效
      • 4. Java 代码连接(开发阶段)
        • 1. Redis 底层通信基于 TCP
        • 2. Jedis 连接字符串格式
        • 方式一:标准 URL 格式(推荐)
        • 方式二:传统参数方式
        • 3. 为什么需要 `tcp://`?
        • 4. 常见误区
        • 5.总结
      • 5. 生产环境注意事项
    • 五、关键配置与避坑点
    • 六、总结:安全访问云服务器 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 的完整链路

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88059.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞算 JavaAI 开发助手:深度学习驱动下的 Java 全链路智能开发新范式

飞算 JavaAI 开发助手&#xff1a;深度学习驱动下的 Java 全链路智能开发新范式 文章目录飞算 JavaAI 开发助手&#xff1a;深度学习驱动下的 Java 全链路智能开发新范式前言飞算 JavaAI IDEA插件下载、注册、使用智能引导操作流程Java Chat智能工作流程操作流程智能问答操作流…

Spring Boot 核心特性与版本演进解析

深度解读自动配置原理、版本差异与 3.x 的颠覆性变革 一、Spring Boot 的核心理念与迭代主线 Spring Boot 用两大核心武器重构了 Java 开发范式&#xff1a; 嵌入式容器&#xff1a;终结了 “war 包 Tomcat 配置地狱”&#xff0c;让 java -jar 成为生产级部署的标准姿势自动…

React Tailwind css 大前端考试、问卷响应式模板

功能概述 基于 React 和 Tailwind CSS 开发的在线大前端知识考试系统。页面设计简洁美观&#xff0c;交互流畅&#xff0c;适合前端开发者、学习者进行自我测试和知识巩固。系统内置多道涵盖 React、CSS、JavaScript、HTTP 等前端核心知识点的题目&#xff0c;支持单选与多选题…

【前端】手写代码汇总

近期更新完&#xff0c;后面不定期更新&#xff0c;建议关注收藏点赞。 目录快排手写防抖节流数组扁平化&#xff08;要求使用 reduce 方法&#xff09;数组filter实现手写一个加载图片的函数 loadImage手写Promise then手写 Promise.All手写 Promise.race手写allsettled手写us…

基于MATLAB 的心电信号去噪

基于Matlab的心电信号去噪 generate.m , 3450 genR.m , 953 genU.m , 891 get_obs.m , 957 CHANGELOG , 11185 find_localobs.m , 2312 fmain.m , 2272

git branch -a 还有一些已经删除了的分支

如何处理已经删除的远程跟踪分支1、删除远程跟踪分支如果你确定某个远程跟踪分支不再需要&#xff0c;你可以使用 git branch -d -r 命令来删除它。例如&#xff0c;要删除名为 origin/test 的远程跟踪分支&#xff0c;你可以使用&#xff1a;git branch -d -r origin/test2、更…

软件反调试(4)- 基于IsDebuggerPresent的检测

反调原理 该检测方式使用 IsDebuggerPresent 或者 CheckRemoteDebuggerPresent 函数&#xff0c;这两个函数都是 kernel32.dll 中实现的 对于 IsDebuggerPresent 函数&#xff0c;如果返回值为 TRUE&#xff0c;那么表示当前进程在调试器上下文中运行 CheckRemoteDebuggerPrese…

翻译《The Old New Thing》- Windows 媒体目录中 onestop.mid 文件的故事

Whats the story of the onestop.mid file in the Media directory? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20130212-00/?p5263 如果你查看你的C:\Windows\Media文件夹&#xff0c;会发现一个名为onestop的MIDI文件。这个奇怪的小MIDI文件背后有什…

【方案】前端UI布局的绝技,响应式布局,多端适配

大家好&#xff0c;欢迎来到停止重构的频道。本期讨论网页UI布局。网页UI布局是前端开发中占比较多的部分&#xff0c;做完网页布局也就差不多完成了一半的工作。本期视频&#xff0c;我们不再讨论基础的UI布局。我们希望满足响应式布局&#xff0c;一份代码适配PC/平板/手机等…

【郑大二年级信安小学期】Day4上午:Bool盲注时间盲注堆叠查询post注入HTTP头部注入ua字段

目录 0 录制文件 1 SQL注入-布尔盲注 1.1 布尔盲注优缺点 1.2 先看一下第八关嗯页面特征 1.3 步骤 1.4 常用函数 1.5 判断是否字符型 1.6 判断闭合 1.7 查询库名 1.8 查询数据表 1.9 获取字段名 1.10 获取数据 1.11 布尔盲注缺陷 2 时间盲注 2.1 基础知识 2.2 判…

如何设计一个“真正可复用”的前端组件?

&#x1f9f1; 如何设计一个“真正可复用”的前端组件&#xff1f;&#x1f527; 一个按钮可以写10次&#xff0c;也可以封装一次复用全场&#xff1b;组件是前端的积木&#xff0c;而设计模式才是组装它们的说明书。你真的在写“可复用”组件吗&#xff1f;&#x1f9e0; 什么…

AlpineLinux安装RabbitMQ及其管理界面

AlpineLinux安装RabbitMQ及其管理界面 本文以 alpine linux 的 3.21版本为例,演示对于 RabbitMQ 在Linux 下的安装,其他发行版本大同小异。主要是包管理软件的命令区别,以及在线仓库提供的 RabbitMQ 版本差异而已。 (一)安装 Erlang 因为 RabbitMQ 是用 Erlang 语言编写…

3S技术+ArcGIS/ENVI全流程实战:水文、气象、灾害、生态、环境及卫生等领域应用

系统梳理3S技术的核心理论与实战应用&#xff0c;涵盖ArcGIS与ENVI软件操作、空间数据管理、地图投影转换、遥感影像解译、DEM地形分析、空间插值建模等关键技能&#xff0c;并结合农业、气象、生态、灾害等跨学科案例&#xff0c;提供从数据获取到高级可视化的完整解决方案。无…

弹窗中el+table,二次打开弹窗,选择列会携带第一次选择的数据

1第一次打开弹窗选择的数据&#xff0c;正确&#xff0c;然后关闭弹窗再次打开弹窗&#xff0c;重新选择&#xff0c;第二次的数据&#xff0c;错误在打开弹窗/关闭弹窗等位置全部做了置空处理&#xff0c;以下是代码&#xff1a;最后的原因是&#xff1a;el-dailog 自带缓存&a…

RocketMQ在Spring Boot中的详细使用指南

📋 目录 🚀 RocketMQ简介 什么是RocketMQ? 核心概念 🏗️ 基础架构组件 📝 重要概念解释 🔧 环境搭建 1. RocketMQ服务端安装 Docker方式(推荐初学者) 手动安装方式 2. 验证安装 🏗️ Spring Boot集成配置 1. 添加依赖 2. 配置文件 application.y…

基于Java+Springboot的医院档案管理系统

源码编号&#xff1a;S597源码名称&#xff1a;基于Springboot的医院档案管理系统用户类型&#xff1a;多角色&#xff0c;用户、医护人员、管理员数据库表数量&#xff1a;11 张表主要技术&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven运行环境&#xff1a;Windows/M…

Pandas 学习教程

目录 定义 基本操作 一维数组操作 二维数组操作 数据选择过滤 数据处理 数据清洗 数据转换 数据分析 排序 分组聚合 数据透视表 高级操作 合并数据 时间序列处理 自定义函数调用 数据可视化集成 数据导出和导入 大数据分块处理 定义 全称&#xff1a; panel da…

QueryWrapper 类的作用与示例详解

通俗易懂的解释想象一下你去图书馆找书&#xff1a;QueryWrapper 就像是一个智能的图书管理员你告诉管理员你的需求&#xff1a;"我要找计算机类、2020年后出版的、作者是张三的书"管理员会根据你的要求组合查询条件&#xff0c;然后去书库帮你找书在编程中&#xff…

【PyTorch】PyTorch中torch.nn模块的循环层

PyTorch深度学习总结 第九章 PyTorch中torch.nn模块的循环层 文章目录PyTorch深度学习总结前言一、循环层1. 简单循环层&#xff08;RNN&#xff09;2. 长短期记忆网络&#xff08;LSTM&#xff09;3. 门控循环单元&#xff08;GRU&#xff09;4. 双向循环层二、循环层参数1. …

Ubuntu 24.04 LTS 服务器配置:安装 JDK、Nginx、Redis。

Ubuntu 24.04 LTS 服务器配置&#xff1a;安装 JDK、Nginx、Redis。新建用来放置软件安装包的目录 mkdir /home/software 配置目录所有者为 ubuntu 用户&#xff1a; chown ubuntu /home/software将软件安装包上传到 /home/software配置 JDK-8 新建 jdk 安装目录 mkdir /usr/ja…