【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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级别的视觉-语言交互能力。该项目通过视觉指令微调技术,将预训练的视觉编码器与语言模型深度融合,在多个多模态基准测试中达到…

如何利用大模型对文章进行分段,提高向量搜索的准确性?

利用大模型对文章进行分段以提高向量搜索准确性,需结合文本语义理解、分块策略优化以及向量表示技术。以下是系统性的解决方案: 一、分块策略的核心原则 语义完整性优先 分块需确保每个文本单元在语义上独立且完整。研究表明,当分块内容保持单一主题时,向量嵌入的语义表征能…