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
英文地址,請注明出處:http://en.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…