瑞_Redis_Redis的Java客戶端

文章目錄

    • 1 Redis的Java客戶端
      • 1.1 Jedis快速入門
        • 1.1.1 入門案例
          • 1.1.1.1 項目構建
          • 1.1.1.2 引入依賴
          • 1.1.1.3 建立連接
          • 1.1.1.4 釋放資源
          • 1.1.1.5 測試
          • 1.1.1.6 完整測試類代碼
        • 1.1.2 Jedis連接池
          • 1.1.2.1 連接池工具類
          • 1.1.2.2 改造原始代碼

🙊 前言:本文章為瑞_系列專欄之《Redis》的基礎篇的Redis的Java客戶端章節。由于博主是從B站黑馬程序員的《Redis》學習其相關知識,所以本系列專欄主要是針對該課程進行筆記總結和拓展,文中的部分原理及圖解等也是來源于黑馬提供的資料,特此注明。本文僅供大家交流、學習及研究使用,禁止用于商業用途,違者必究!


主機操作系統:Windows10
VMware版本:?VMware Workstation 16.2.4
Linux版本:CentOS 7 64位
遠程連接工具:MobaXterm_Personal_23.2
Redis版本:redis-6.2.6.tar.gz
Redis客戶端:resp-2022.2.0.0

相關鏈接:《瑞_VMware虛擬機安裝Linux純凈版(含卸載,圖文超詳細)》
相關鏈接:《瑞_Redis_初識Redis(含安裝教程)》
相關鏈接:《瑞_Redis_Redis客戶端》
相關鏈接:《瑞_Redis_Redis命令》

Ray-Logo

1 Redis的Java客戶端

??在Redis官網中提供了各種語言的客戶端,地址:https://redis.io/docs/clients/

在這里插入圖片描述


??標記為?的就是推薦使用的java客戶端,包括??

  • Jedis和Lettuce:這兩個主要是提供了Redis命令對應的API,方便我們操作Redis,而SpringDataRedis又對這兩種做了抽象和封裝,因此我們后期會直接以SpringDataRedis來學習。
  • Redisson:是在Redis基礎上實現了分布式的可伸縮的java數據結構,例如Map.Queue等,而且支持跨進程的同步機制:Lock.Semaphore等待,比較適合用來實現特殊的功能需求。

在這里插入圖片描述

Spring Data Redis 底層兼容了 Jedis 和 Lettuce



1.1 Jedis快速入門

??Jedis的官網地址:http://github.com/redis/jedis

1.1.1 入門案例

1.1.1.1 項目構建

??新建一個普通的 Maven 項目,項目名為jedis-demo,如下

在這里插入圖片描述

1.1.1.2 引入依賴

??pom.xml 引入依賴如下:

        <!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency><!--單元測試--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.7.0</version><scope>test</scope></dependency>

在這里插入圖片描述

瑞:隨時時間的推移,該版本可能已經較為老舊(但適配JDK1.8)如果下載不到該依賴,可以參考下面的配置

??能下載到 jedis 3.7.0版本的鏡像倉庫的Maven配置

      <mirror><id>nexus-aliyun</id><mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url></mirror>
1.1.1.3 建立連接

??新建一個單元測試類JedisTest,內容如下:

在這里插入圖片描述

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;import java.util.Map;/*** Jedis快速入門測試** @author LiaoYuXing-Ray* @version 1.0* @createDate 2024/3/1 21:59**/
public class JedisTest {private Jedis jedis;@BeforeEachvoid setUp() {// 1.建立連接(IP換成你Redis服務的IP)jedis = new Jedis("192.168.13.128", 6379);// 2.設置密碼(如果密碼不一樣請記得替換)jedis.auth("123456");// 3.選擇庫jedis.select(0);}
}
1.1.1.4 釋放資源
@AfterEach
void tearDown() {if (jedis != null) {jedis.close();}
}

瑞:釋放連接千萬不能忘,否則容易造成內存泄漏,內存泄漏的積累可能會導致內存溢出,后果非常嚴重

1.1.1.5 測試
@Test
void testString() {// 存入數據String result = jedis.set("name", "虎哥");System.out.println("result = " + result);// 獲取數據String name = jedis.get("name");System.out.println("name = " + name);
}@Test
void testHash() {// 插入hash數據jedis.hset("user:1", "name", "Jack");jedis.hset("user:1", "age", "21");// 獲取Map<String, String> map = jedis.hgetAll("user:1");System.out.println(map);
}
1.1.1.6 完整測試類代碼
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;import java.util.Map;/*** Jedis快速入門測試** @author LiaoYuXing-Ray* @version 1.0* @createDate 2024/3/1 21:59**/
public class JedisTest {private Jedis jedis;@BeforeEachvoid setUp() {// 1.建立連接(IP換成你Redis服務的IP)jedis = new Jedis("192.168.13.128", 6379);// 2.設置密碼(如果密碼不一樣請記得替換)jedis.auth("123456");// 3.選擇庫jedis.select(0);}@AfterEachvoid tearDown() {if (jedis != null) {jedis.close();}}@Testvoid testString() {// 存入數據String result = jedis.set("name", "瑞神");System.out.println("result = " + result);// 獲取數據String name = jedis.get("name");System.out.println("name = " + name);}@Testvoid testHash() {// 插入hash數據jedis.hset("user:1", "name", "Jack");jedis.hset("user:1", "age", "21");// 獲取Map<String, String> map = jedis.hgetAll("user:1");System.out.println(map);}
}

??運行結果如下??

在這里插入圖片描述

瑞:
??如果連接不上Linux中的Redis服務,可以參考《附:解決Liunx防火墻和開放端口號》
??其它Redis數據類型的命令不演示,有需要可以參考《瑞_Redis_Redis命令》

1.1.2 Jedis連接池

??Jedis本身是線程不安全的,并且頻繁的創建和銷毀連接會有性能損耗,因此我們推薦大家使用Jedis連接池代替Jedis的直連方式。

??有關池化思想,并不僅僅是這里會使用,很多地方都有,比如說我們的數據庫連接池,比如我們 tomcat 中的線程池,這些都是池化思想的體現。

1.1.2.1 連接池工具類

瑞:以下代碼基于本文1.1.1章節的項目

??創建JedisConnectionFactory連接池工具類

在這里插入圖片描述

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** Jedis 連接池工具類** @author LiaoYuXing-Ray* @version 1.0* @createDate 2024/3/1 22:32**/
public class JedisConnectionFactory {private static final JedisPool jedisPool;static {// 配置連接池JedisPoolConfig poolConfig = new JedisPoolConfig();// 最大連接poolConfig.setMaxTotal(8);// 最大空閑連接poolConfig.setMaxIdle(8);// 最小空閑連接poolConfig.setMinIdle(0);// 設置最長等待時間,單位:mspoolConfig.setMaxWaitMillis(1000);// 創建連接池對象(記得替換為你Redis服務的IP,端口,密碼)jedisPool = new JedisPool(poolConfig,"192.168.13.128",6379,1000,"123456");}// 獲取Jedis對象public static Jedis getJedis(){return jedisPool.getResource();}
}

代碼說明:

  • 1) JedisConnectionFacotry:工廠設計模式是實際開發中非常常用的一種設計模式,我們可以使用工廠,去降低代的耦合,比如Spring中的Bean的創建,就用到了工廠設計模式

瑞:工廠模式詳情可以參考《瑞_23種設計模式_工廠模式》

  • 2)靜態代碼塊:隨著類的加載而加載,確保只能執行一次,我們在加載當前工廠類的時候,就可以執行static的操作完成對連接池的初始化
  • 3)最后提供返回連接池中連接的方法
1.1.2.2 改造原始代碼

??對JedisTest類進行如下改造,測試方法不變

    @BeforeEachvoid setUp() {// 1.建立連接(IP換成你Redis服務的IP)
//        jedis = new Jedis("192.168.13.128", 6379);// 代碼改造jedis = JedisConnectionFactory.getJedis();// 2.設置密碼(如果密碼不一樣請記得替換)jedis.auth("123456");// 3.選擇庫jedis.select(0);}@AfterEachvoid tearDown() {if (jedis != null) {// 代碼未修改,但是執行邏輯變為向連接池歸還連接對象jedis.close();}}

在這里插入圖片描述

??代碼說明:

??在我們完成了使用工廠設計模式來完成代碼的編寫之后,我們在獲得連接時,就可以通過工廠來獲得。而不用直接去new對象,降低耦合,并且使用的還是連接池對象。

??當我們使用了連接池后,我們關閉連接其實并不是關閉,而是將Jedis連接對象還回連接池




本文是博主的粗淺理解,可能存在一些錯誤或不完善之處,如有遺漏或錯誤歡迎各位補充,謝謝

??如果覺得這篇文章對您有所幫助的話,請動動小手點波關注💗,你的點贊👍收藏??轉發🔗評論📝都是對博主最好的支持~


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712464.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于單片機的聲光控制節能燈設計

摘 要:在當今社會,節約用電是低碳生活的基本行為之一,但是一些公眾場所電力浪費現象依然存在,特別是長明燈、常亮屏等屢見不鮮,造成了嚴重的電力浪費。針對這種電力浪費現象,該文基于STC89C52單片機設計了一種聲光控制節能燈,利用光敏電阻、光信息及語音信號控制電路收集…

常用sql語句及其優化

文章目錄 介紹常用sql語句1. 數據查詢1.1 SELECT 語句1.2 DISTINCT 關鍵字1.3 WHERE 子句1.4 ORDER BY 子句1.5 LIMIT 關鍵字 2. 數據更新2.1 INSERT INTO 語句2.2 UPDATE 語句2.3 DELETE FROM 語句 3. 數據管理3.1 CREATE TABLE 語句3.2 ALTER TABLE 語句3.3 DROP TABLE 語句 …

藍橋輔導之管道

藍橋輔導之管道 核心思想&#xff1a;二分 二分時間 若t時刻成立 則之后也一定成立將mid時刻時每個閥門的水的流動區間加入對組 合并區間 最終判斷是否覆蓋全管道l1 && r m; #include <iostream>#include <cstring>#include <algorithm>#define…

批量自動加好友神器!微信快速擴友秘籍!

對于一些個人或者企業來說&#xff0c;傳統的人工添加好友方式往往會出現效率低下&#xff0c;費時費力的問題。那么&#xff0c;有沒有一種快速、便捷、安全的方式來解決這個問題呢&#xff1f;答案當然是肯定的&#xff0c;那就是通過使用微信管理系統來解決這一問題。 在微…

基于java+springboot景區行李寄存管理系統設計和實現

基于javaspringboot景區行李寄存管理系統設計和實現 博主介紹&#xff1a;多年java開發經驗&#xff0c;專注Java開發、定制、遠程、文檔編寫指導等,csdn特邀作者、專注于Java技術領域 作者主頁 央順技術團隊 Java畢設項目精品實戰案例《1000套》 歡迎點贊 收藏 ?留言 文末獲取…

5GC SBA架構

協議標準&#xff1a;Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述說明NSSFNetwork Slice Selection Function網絡切片選擇&#xff0c;根據UE的切片選擇輔助信息、簽約信息等確定UE允許接入的網絡切片實例。NEF Network Exposure Function網絡開…

疾控中心的污水采樣瓶用的是什么材質

疾控中心的污水采樣瓶采用的材質是聚乙烯或聚丙烯塑料。這種材質的污水采樣瓶具有耐腐蝕、耐高壓、無毒無味、重量輕、易于攜帶等優點。此外&#xff0c;這種材質的污水采樣瓶還可以在高溫下消毒&#xff0c;不會變形或破裂。 疾控中心的污水采樣瓶通常有不同的容積和形狀&…

Harbor高可用(haproxy和keepalived)

Harbor高可用&#xff08;haproxy和keepalived&#xff09; 文章目錄 Harbor高可用&#xff08;haproxy和keepalived&#xff09;1.Harbor高可用集群部署架構1.1 主機初始化1.1.1 設置網卡名和ip地址1.1.2 設置主機名1.1.3 配置鏡像源1.1.4 關閉防火墻1.1.5 禁用SELinux1.1.6 設…

SpringBoot 自定義映射規則resultMap association一對一

介紹 例&#xff1a;學生表&#xff0c;班級表&#xff0c;希望在查詢學生的時候一起返回該學生的班級&#xff0c;而一個實體類封裝的是一個表&#xff0c;如需要多表查詢就需要自定義映射。 表結構 班級表 學生表 SQL語句 SELECT a.id,a.name,a.classes,b.id classes…

Charles抓包 - 安裝、激活、證書配置

最近剛好又遇到了抓包的需求&#xff0c;之前一直使用 Fiddler 抓包&#xff0c;這幾年一直聽大家都在用 Charles 抓包&#xff0c;正好一起了解下&#xff08;一般建議掌握一種抓包方式即可&#xff0c;都可以解決同種需求場景&#xff09; 抓包 Fiddler抓包 Charles 下載、安…

[機器視覺]halcon應用實例 多ROI模板匹配

本示例是單ROI的功能擴展示例&#xff0c;多ROI.后面有空了將出用戶自定義ROI。 比單ROI增加ROI區域的連接和合并。還有for的實例應用。步驟同單ROI一樣。不懂的可以看一下單ROI文章。[機器視覺]halcon應用實例 單ROI模板匹配-CSDN博客 有需要的可以【點贊】【關注】【收藏】…

2024年新提出的算法|LEA愛情進化算法(Love Evolution Algorithm)

Love Evolution Algorithm: a stimulus–value–role theory-inspired evolutionary algorithm for global optimization 愛情進化算法Love Evolution Algorithm&#xff0c;LEA&#xff0c;于2024年2月發表在中科院3區SCI期刊 The Journal of Supercomputing。 1、簡介 本文提…

幸運星數(爺再也不想用pow了)

解法&#xff1a; 暴力 #include <iostream> #include <vector> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n;long long sum 0, a;cin >> n;for (int i 1; i < n; i) {a 1;for (in…

#python升級#CentOS 7 python升級到3.11.6

在 CentOS 7 上升級 Python 版本可能會比較復雜&#xff0c;因為 CentOS 7 默認安裝的是 Python 2.7&#xff0c;并且系統很多組件依賴于它。不過&#xff0c;可以通過以下步驟嘗試升級到 Python 3.11.6&#xff1a; 安裝必要的依賴&#xff1a; sudo yum install gcc openssl-…

洛谷P1015回文數

題目描述 若一個數&#xff08;首位不為零&#xff09;從左向右讀與從右向左讀都一樣&#xff0c;我們就將其稱之為回文數。 例如&#xff1a;給定一個十進制數 5656&#xff0c;將 5656 加 6565&#xff08;即把 5656 從右向左讀&#xff09;&#xff0c;得到 121121 是一個…

藍橋杯刷題2

1. 修建灌木 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();for (int i 1;i < n1;i){int distance Math.max(i-1,n-i);System.out.println(distance*2);}scan.close…

軟件設計師軟考題目解析12 --每日五題

想說的話&#xff1a;要準備軟考了。0.0&#xff0c;其實我是不想考的&#xff0c;但是吧&#xff0c;由于本人已經學完所有知識了&#xff0c;只是被學校的課程給鎖在那里了&#xff0c;不然早找工作去了。尋思著反正也無聊&#xff0c;就考個證玩玩。 本人github地址&#xf…

種花

分情況&#xff1a; 第一盆k種選擇&#xff0c;之后全部k-1種選擇 每次相乘結果對1e97取模 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n const int N 1e9 7;int main() {ios::sync_with_stdio(f…

微信小程序iOS禁止上下拉顯示白邊

先上圖暴露出問題 iOS端這個頁面明明正好顯示的&#xff0c;非要能下拉上拉給顯示出來點白邊。這樣不就不好看了嘛。。 想了想是不是支持頁面下拉導致的&#xff0c;加入以下代碼到json文件中。 {"enablePullDownRefresh": false,"usingComponents": {} }…

java009 - Java面向對象基礎

1、類和對象 1.1 什么是對象 萬物皆對象&#xff0c;客觀存在的事物皆為對象。 1.2 什么是面向對象 1.3 什么是類 類是對現實生活中一類具有共同屬性和行為的事物抽象。 特點&#xff1a; 類是對象的數據類型類是具有相同屬性和行為的一組對象的集合 1.4 什么是對象的屬…