【redis】jedis客戶端的使用

Jedis是Redis官方推薦的Java客戶端庫,提供了對Redis數據庫的全面支持,適用于單機、哨兵及集群模式。作為最老牌的Java Redis客戶端,其API設計直觀,與Redis命令高度對應,例如set、get等方法與原生命令一致,降低了學習成本。

簡單使用

引入依賴:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version>
</dependency>

使用示例:

package com.morris.redis.demo.jedis;import redis.clients.jedis.Jedis;import java.util.List;
import java.util.Map;/*** jedis的簡單使用*/
public class JedisDemo {public static void main(String[] args) {// 創建Jedis實例(默認端口6379)try (Jedis jedis = new Jedis("127.0.0.1", 6380)) {// 若需認證(如設置密碼)// jedis.auth("your_password");// 字符串類型的使用jedis.set("key1", "value1");          // 設置鍵值String value = jedis.get("key1");     // 獲取值(返回"value1")jedis.incr("counter");                // 自增數值(可用于計數器場景)// hash類型的使用jedis.hset("user:1", "name", "John"); // 設置哈希字段String name = jedis.hget("user:1", "name"); // 獲取字段值Map<String, String> user = jedis.hgetAll("user:1"); // 獲取全部字段// list類型的使用jedis.rpush("list1", "element1", "element2"); // 右側插入元素List<String> list = jedis.lrange("list1", 0, -1); // 獲取全部元素String popped = jedis.lpop("list1");           // 左側彈出元素// 測試連接System.out.println("連接狀態: " + jedis.ping()); // 輸出"PONG"表示成功} // try-with-resources自動關閉連接}
}

連接池優化(推薦生產環境使用)

Jedis使用連接池的核心目的是解決直連模式下的性能瓶頸與資源管理問題。由于每次直連Redis都需新建TCP連接(三次握手)并在操作后關閉(四次揮手),高頻請求時網絡延遲占比可能高達97%,而連接池通過復用已建立的連接,將單次操作耗時從40ms級降至微秒級。此外,Jedis實例非線程安全,連接池為每個線程分配獨立連接,規避多線程競爭風險。

package com.morris.redis.demo.jedis;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** jedis連接池的使用*/
public class JedisPoolDemo {public static void main(String[] args) {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(400);          // 最大連接數config.setMaxIdle(400);            // 最大空閑連接config.setMinIdle(100);            // 最小空閑連接config.setMaxWaitMillis(5000);     // 最大等待5秒config.setTestOnBorrow(false);     // 禁用借出檢測config.setTestWhileIdle(true);     // 開啟空閑檢測config.setTimeBetweenEvictionRunsMillis(30000);  // 每30秒檢測空閑連接config.setLifo(false);             // 使用FIFO均衡負載try (JedisPool pool = new JedisPool(config, "127.0.0.1", 6379)) {Jedis jedis = pool.getResource();jedis.set("xx", "oo");System.out.println(jedis.get("xx"));// 執行操作...jedis.close(); // 歸還連接到池}}
}

與SpringBoot的結合使用

需在pom.xml中添加spring-boot-starter-data-redis和Jedis客戶端依賴,并排除默認的Lettuce客戶端(也可以不排除,但是需要在配置文件中需要指定client-type)。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>

在application.yml中配置Redis服務器地址及連接池參數,指定client-type為jedis。

spring:data:redis:host: 127.0.0.1port: 6379
#      password: your_passwordjedis:pool:max-active: 200    # 最大活躍連接數max-idle: 100     # 最大空閑連接min-idle: 50      # 最小空閑連接max-wait: 3000ms  # 獲取連接最大等待時間client-type: jedis # 需要手動指定jedis,否則默認是lettuce

RedisTemplate序列化配置,自定義RedisTemplate以避免默認的JDK序列化問題:

package com.morris.redis.demo.jedis;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setConnectionFactory(factory);return template;}
}

RedisTemplate的使用:

package com.morris.redis.demo.jedis;import com.morris.redis.demo.RedisDemoApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.data.redis.core.RedisTemplate;/*** RedisTemplate的使用*/
@SpringBootApplication
public class JedisSpringBootDemo {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(JedisSpringBootDemo.class, args);RedisTemplate redisTemplate = (RedisTemplate) applicationContext.getBean("redisTemplate");redisTemplate.opsForValue().set("oo", "xx");System.out.println(redisTemplate.opsForValue().get("oo"));applicationContext.close();}
}

jedis哨兵模式的使用

Jedis配置哨兵模式下的Redis地址需通過哨兵節點列表和主節點名稱實現,并結合連接池參數優化。

spring:data:redis:sentinel:master: mymasternodes: 127.0.0.1:16380,127.0.0.1:16381,127.0.0.1:16382jedis:pool:max-active: 200    # 最大活躍連接數max-idle: 100     # 最大空閑連接min-idle: 50      # 最小空閑連接max-wait: 3000ms  # 獲取連接最大等待時間client-type: jedis # 需要手動指定jedis,否則默認是lettuce

jedis cluster的使用

配置文件中配置集群節點:

spring:data:redis:jedis:pool:max-active: 200    # 最大連接數max-idle: 100      # 最大空閑連接數min-idle: 50       # 最小空閑連接數max-wait: 3000ms   # 獲取連接的最大等待時間client-type: jedis     # 客戶端類型使用 jedis(默認是 lettuce)# redis集群模式cluster:nodes: 127.0.0.1:3001,127.0.0.1:3002,127.0.0.1:3003max-redirects: 5

Jedis在初始化時,通過cluster slots命令獲取集群中所有槽與節點的對應關系,并將這些信息緩存在本地(JedisClusterInfoCache類中)。每次操作時,客戶端直接根據本地緩存確定Key所屬的槽及對應的節點,無需依賴服務端重定向。

如果請求發送到錯誤的節點(如槽遷移或節點故障),Redis會返回MOVED錯誤,此時Jedis會重新執行cluster slots命令更新本地映射,并重試請求。默認最多重試5次,超過則拋出Too many cluster redirection異常。

Jedis為每個Redis節點創建獨立的連接池(JedisPool),確保高并發下的資源復用和線程安全。

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

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

相關文章

Spark處理過程-轉換算子

大家前面的課程&#xff0c;我們學習了Spark RDD的基礎知識&#xff0c;知道了如何去創建RDD&#xff0c;那spark中具體有哪些rdd&#xff0c;它們有什么特點呢&#xff1f; 我們這節課來學習。 &#xff08;一&#xff09;RDD的處理過程 Spark使用Scala語言實現了RDD的API,程…

【Linux】多路轉接epoll、Linux高并發I/O多路復用

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f152; C 語言 | &#x1f310; 計算機網絡 上篇文章&#xff1a;五種IO模型與阻塞IO以及多路轉接select機制編寫echoserver 下篇文章…

【三維重建】三維場景生成:綜述

標題&#xff1a;《3D Scene Generation: A Survey》 來源&#xff1a;新加坡南洋理工大學 項目&#xff1a;https://github.com/hzxie/Awesome-3D-Scene-Generation 文章目錄 摘要一、前言二、準備工作2.1 任務定義2.2 三維場景表示2.3 生成模型 三、方法&#xff1a;分層分類…

前端~三維地圖(cesium)動態材質飛線

自定義飛線材質 FlyLineMaterial.ts import * as Cesium from "cesium";// 修改&#xff1a;新增流動區域顏色和速率參數 const FlyLineShaderSource uniform vec4 color; uniform vec4 flowColor; uniform float percent; uniform float speed;czm_material czm…

[Spring AOP 8] Spring AOP 源碼全流程總結

Spring AOP總結 更美觀清晰的版本在&#xff1a;Github 前面的章節&#xff1a; [Spring AOP 1] 從零開始的JDK動態代理 [Spring AOP 2] 從零開始的CGLIB動態代理 [Spring AOP 3] Spring選擇代理 [Spring AOP 4] Spring AOP 切點匹配 [Spring AOP 5] 高級切面與低級切面&#…

C#高級編程:加密解密

在數字化時代,數據安全是每個應用程序都必須重視的環節。無論是用戶的個人信息、敏感的商業數據,還是重要的系統配置,都需要得到妥善的保護。C# 作為一種廣泛應用的編程語言,提供了豐富且強大的加密解密功能,幫助開發者構建安全可靠的應用。本文將深入探討 C# 高級編程中的…

基于運動補償的前景檢測算法

這段代碼實現了基于運動補償的前景檢測算法。 主要功能包括&#xff1a; 運動補償模塊&#xff1a;使用基于網格的 KLT 特征跟蹤算法計算兩幀之間的運動&#xff0c;然后通過單應性變換實現幀間運動補償。前景檢測模塊&#xff1a;結合兩幀運動補償結果&#xff0c;通過幀間差…

使用matlab進行數據擬合

目錄 一、工作區建立數據 二、曲線擬合器(在"APP"中) 三、曲線擬合函數及參數 四、 在matlab中編寫代碼 一、工作區建立數據 首先&#xff0c;將數據在matlab工作區中生成。如圖1所示&#xff1a; 圖 1 二、曲線擬合器(在"APP"中) 然后&#xff0c;…

Playwright 安裝配置文件詳解

Playwright 安裝&配置文件詳解 環境準備 Node.js 14.0&#xff08;推薦 LTS 版本&#xff09;npm&#xff08;推薦使用最新版&#xff09;支持 Windows、macOS、Linux 一步到位的官方推薦安裝方式 1. 進入你的項目目錄 # Windows cd 路徑\到\你的項目 # macOS/Linux cd…

中國古代史4

東漢 公元25年&#xff0c;劉秀建立東漢&#xff0c;定都洛陽&#xff0c;史稱光武中興 白馬寺&#xff1a;漢明帝時期建立&#xff0c;是佛教傳入中國后興建的第一座官辦寺院&#xff0c;有中國佛教的“祖庭”和“釋源”之稱&#xff0c;距今1900多年歷史 班超—西域都護—投…

springboot + mysql8降低版本到 mysql5.7

springboot mysql8降低版本到 mysql5.7 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency>spring:datasource:driverClassName: com.mysql.jdbc.D…

4.4java常用類

在 Java 中&#xff0c;System 和 Runtime 類都是 java.lang 包下非常重要的類&#xff0c;它們提供了與系統交互以及管理 Java 虛擬機&#xff08;JVM&#xff09;運行時環境的功能。 System 類 System 類包含了一些有用的類字段和方法&#xff0c;它不能被實例化&#xff0…

【嵌入式筆記】Modbus TCP

1.概述 定義&#xff1a;Modbus TCP 是 Modbus 協議的變體&#xff0c;基于 TCP/IP 協議棧&#xff0c;用于通過以太網實現工業設備間的通信。 背景&#xff1a;由施耐德電氣&#xff08;原 Modicon 公司&#xff09;在 1999 年發布&#xff0c;將傳統的 Modbus RTU/ASCII 適配…

《解鎖React Native與Flutter:社交應用啟動速度優化秘籍》

React Native和Flutter作為當下熱門的跨平臺開發框架&#xff0c;在優化應用啟動性能方面各有千秋。今天&#xff0c;我們就深入剖析它們獨特的策略與方法。 React Native應用的初始包大小對啟動速度影響顯著。在打包階段&#xff0c;通過精準分析依賴&#xff0c;去除未使用的…

R語言學習--Day02--實戰經驗反饋

最近在做需要用R語言做數據清洗的項目&#xff0c;在網上看再多的技巧與語法&#xff0c;都不如在項目中實戰學習的快&#xff0c;下面是我通過實戰得來的經驗。 判斷Rstudio是否卡死 很多時候&#xff0c;我們在運行R語言代碼時&#xff0c;即使只是運行框選的幾行代碼&#…

How Sam‘s Club nudge customers into buying more

Here’s how Sam’s Club (or similar warehouse memberships) nudge customers into buying more: It’s a classic psychological strategy rooted in sunk cost fallacy and loss aversion. 1. Prepaid Membership Creates a “Sunk Cost” Once you’ve paid the annual …

OpenHarmony系統HDF驅動開發介紹(補充)

一、HDF驅動簡介 HDF&#xff08;Hardware Driver Foundation&#xff09;驅動框架&#xff0c;為驅動開發者提供驅動框架能力&#xff0c;包括驅動加載、驅動服務管理、驅動消息機制和配置管理。 簡單來說&#xff1a;HDF框架的驅動和Linux的驅動比較相似都是由配置文件和驅動…

自然語言處理 (NLP) 入門:NLTK 與 SpaCy 的初體驗

自然語言處理入門&#xff1a;NLTK 與 SpaCy 的初體驗 在當今數字化飛速發展的浪潮中&#xff0c;自然語言處理&#xff08;NLP&#xff09;已經成為了極具熱度的技術領域。自然語言處理的核心目標是讓計算機能夠理解、分析并生成人類語言&#xff0c;其應用場景極為廣泛&…

LLaVA:開源多模態大語言模型深度解析

一、基本介紹 1.1 項目背景與定位 LLaVA(Large Language and Vision Assistant)是由Haotian Liu等人開發的開源多模態大語言模型,旨在實現GPT-4級別的視覺-語言交互能力。該項目通過視覺指令微調技術,將預訓練的視覺編碼器與語言模型深度融合,在多個多模態基準測試中達到…

如何利用大模型對文章進行分段,提高向量搜索的準確性?

利用大模型對文章進行分段以提高向量搜索準確性,需結合文本語義理解、分塊策略優化以及向量表示技術。以下是系統性的解決方案: 一、分塊策略的核心原則 語義完整性優先 分塊需確保每個文本單元在語義上獨立且完整。研究表明,當分塊內容保持單一主題時,向量嵌入的語義表征能…