jedis使用及注意事项

Jedis

Jedis 是一个 Java 客户端,用于与 Redis 数据库进行交互。它提供了一系列简单易用的 API,使得在 Java 应用程序中使用 Redis 变得非常方便。以下是 Jedis 的使用方法及一些注意事项。

Jedis的优势

Lettuce客户端及Jedis客户端比较如下:

  • Lettuce:Lettuce客户端没有连接保活探测,错误连接存在连接池中会造成请求超时报错。Lettuce客户端未实现testOnBorrow等连接池检测方法,无法在使用连接之前进行连接校验。

  • Jedis:Jedis客户端实现了testOnBorrow、testWhileIdle、testOnReturn等连接池校验配置。开启testOnBorrow在每次借用连接前都会进行连接校验,可靠性最高,但是会影响性能(每次Redis请求前会进行探测)。testWhileIdle可以在连接空闲时进行连接检测,合理配置阈值可以及时剔除连接池中的异常连接,防止使用异常连接造成业务报错。在空闲连接检测之前,连接出现问题,可能会造成使用该连接的业务报错,此处可以通过参数控制检测间隔(timeBetweenEvictionRunsMillis)。

因此,Jedis客户端在面对连接异常,网络抖动等场景下的异常处理和检测能力明显强于Lettuce,可靠性更强。

Jedis 使用

1. 引入依赖

如果你使用 Maven,可以在 pom.xml 中添加以下依赖:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.2.0</version> <!-- 请检查最新版本 -->
</dependency>

2. 创建 Jedis 实例

创建一个 Jedis 实例,连接到 Redis 服务器:

import redis.clients.jedis.Jedis;public class JedisExample {public static void main(String[] args) {// 创建一个 Jedis 实例,连接到 localhost:6379Jedis jedis = new Jedis("localhost", 6379);// 进行身份验证(如果需要)// jedis.auth("your_password");// 测试连接System.out.println("连接成功: " + jedis.ping());// 关闭连接jedis.close();}
}

3. 常用操作

  • 字符串操作

// 设置值
jedis.set("key", "value");
// 获取值
String value = jedis.get("key");
System.out.println("获取的值: " + value);

  • 哈希操作

// 设置哈希
jedis.hset("user:1000", "name", "Alice");
jedis.hset("user:1000", "age", "30");// 获取哈希
String name = jedis.hget("user:1000", "name");
System.out.println("用户姓名: " + name);

  • 列表操作

// 添加元素到列表
jedis.lpush("mylist", "item1");
jedis.lpush("mylist", "item2");// 获取列表元素
List<String> list = jedis.lrange("mylist", 0, -1);
System.out.println("列表内容: " + list);

  • 集合操作

// 添加元素到集合
jedis.sadd("myset", "member1");
jedis.sadd("myset", "member2");// 获取集合成员
Set<String> members = jedis.smembers("myset");
System.out.println("集合成员: " + members);

注意事项

1、连接管理

  • 每次操作前创建和关闭 Jedis 实例会导致性能问题,建议使用连接池。

  • 可以使用 JedisPool 来管理连接。

  • Jedis可以使用tr-with-resources管理资源

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Jedis;public class JedisPoolExample {public static void main(String[] args) {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(100);       // 最大连接数config.setMaxIdle(50);         // 最大空闲连接数config.setMinIdle(10);         // 最小空闲连接数config.setTestOnBorrow(true);  // 在获取连接时检查连接有效性config.setTestWhileIdle(true);  // 在空闲时检查连接有效性config.setMinEvictableIdleTimeMillis(60000); // 空闲连接最小存活时间,60Sconfig.setTimeBetweenEvictionRunsMillis(30000); // 清理线程运行时间间隔,30SJedisPool pool = new JedisPool(config, "localhost", 6379);try (Jedis jedis = pool.getResource()) {System.out.println("连接成功: " + jedis.ping());} catch (Exception e) {e.printStackTrace();} finally {pool.close();}}
}

2、异常处理

  • 在使用 Jedis 时,应当处理可能的异常,例如连接失败、超时等。

3、线程安全

  • Jedis 实例不是线程安全的,因此不应在多个线程之间共享同一个实例。使用连接池可以避免这个问题。

4、Redis 配置

  • 确保 Redis 服务正常运行,并根据需求调整 Redis 配置(如最大连接数、超时时间等)。

5、数据过期

  • Redis 提供了键的过期功能,可以通过 expire 命令设置键的有效时间,以防止数据长时间占用内存。

6、监控与优化

  • 监控 Redis 性能指标(如内存使用、命令执行时间等),并根据实际情况进行优化。

连接池推荐配置

文章转载自:张占岭

原文链接:https://www.cnblogs.com/lori/p/18605815

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

CSDN博客:如何使用Python的`datasets`库转换音频采样率

CSDN博客&#xff1a;如何使用Python的datasets库转换音频采样率 什么是采样率&#xff1f;代码用途&#xff1a;调整音频数据的采样率完整代码示例代码详解运行结果&#xff08;示例&#xff09;总结 在这篇文章中&#xff0c;我们将学习如何使用Python的datasets库对音频数据…

浏览器执行机制

主线程 任务1&#xff0c;任务2 微队列微队列任务1&#xff0c; 微队列任务2延时队列延时队列任务1&#xff0c; 延时队列任务2交互队列.... 事件循环的工作原理 主线程执行同步任务&#xff1a; 主线程首先执行所有同步任务&#xff08;即栈中的任务&#xff09;。这些任务会…

Java 基础知识——part 4

8.成员方法&#xff1a;Java中必须通过方法才能对类和对象的属性操作&#xff1b;成员方法只在类的内部声明并加以实现。一般声明成员变量后再声明方法。 9.方法定义 方法的返回值是向外界输出的信息&#xff0c;方法类型和返回值类型同&#xff1b;返回值通过return返回&…

设计模式12:抽象工厂模式

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 参考&#xff1a; C设计模式&#xff1a;抽象工厂模式&#xff08;风格切换案例&#xff09;_c 抽象工厂-CSDN博客 1.概念 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是软件设计…

【YashanDB知识库】kettle同步大表提示java内存溢出

【问题分类】数据导入导出 【关键字】数据同步&#xff0c;kettle&#xff0c;数据迁移&#xff0c;java内存溢出 【问题描述】kettle同步大表提示ERROR&#xff1a;could not create the java virtual machine! 【问题原因分析】java内存溢出 【解决/规避方法】 ①增加JV…

适配体技术在新药发现中的应用

适配体筛选技术在新药发现中的具体应用 适配体筛选技术&#xff0c;特别是SELEX&#xff08;Systematic Evolution of Ligands by Exponential Enrichment&#xff0c;指数富集的配体系统进化技术&#xff09;&#xff0c;在新药发现中扮演着至关重要的角色。这种技术能够从庞…

C/S软件授权注册系统(Winform+WebApi+.NET8+EFCore版)

适用软件&#xff1a;C/S系统、Winform桌面应用软件。 运行平台&#xff1a;Windows .NETCore&#xff0c;.NET8 开发工具&#xff1a;Visual Studio 2022&#xff0c;C#语言 数据库&#xff1a;Microsoft SQLServer 2012&#xff0c;Oracle 21c&#xff0c;MySQL8&#xf…

go语言使用websocket发送一条消息A,持续接收返回的消息

在Go语言中实现一个WebSocket客户端&#xff0c;可以使用gorilla/websocket这个非常流行的库来处理WebSocket连接。下面是一个简单的示例&#xff0c;展示了如何创建一个WebSocket客户端&#xff0c;向服务器发送消息"A"&#xff0c;并持续接收来自服务器的响应。 首…

监控易 IDC 数据中心一体化智能运维平台:新质生产力的典范

一、引言 在当今数字化飞速发展的时代&#xff0c;IDC 数据中心作为信息产业的核心基础设施&#xff0c;其稳定、高效运行对于企业和社会的重要性不言而喻。随着数据量的爆炸式增长和业务复杂度的提升&#xff0c;传统的运维模式已难以满足需求&#xff0c;数据中心面临着诸多挑…

活着就好20241218

亲爱的朋友们&#xff0c;大家早上好&#xff01;&#x1f31e; 今天是18号&#xff0c;星期三&#xff0c;2024年12月的第十八天&#xff0c;同时也是第50周的第九天&#xff0c;农历甲辰[龙]年十一月初十四日。在这晨光初照的美丽时刻&#xff0c;愿那温柔而灿烂的阳光轻轻洒…

busybox学习——简单介绍

文章目录 简介官网源码目录结构构建 简介 BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils &#xff0c; shellutils等工具&#xff0c;BusyBox提供了一个比较完善的环境&#xff0c;可以适用于任…

C++常见面试题-初级2

1. C和C有什么区别&#xff1f; C是面向对象的语言&#xff0c;而C是面向过程的语言&#xff1b;C引入new/delete运算符&#xff0c;取代了C中的malloc/free库函数&#xff1b;C引入引用的概念&#xff0c;而C中没有&#xff1b;C引入类的概念&#xff0c;而C中没有&#xff1…

Unity UI Button 事件优先级调整技术方案

Unity UI Button 事件优先级调整技术方案 在 Unity 项目开发过程中&#xff0c;针对 UI Button 的事件执行顺序控制是一个常见需求。本文详细阐述两种将新添加事件置于第一个执行位置的方法&#xff0c;旨在为开发者提供全面且专业的技术参考。 一、基于反射机制的事件插入方…

CTFHUB 信息泄露 备份文件下载-网站源码

根据提示应是猜测网站源码的备份文件&#xff0c;可以采用bp拼接文件名和后缀 开启bp抓包后设置第一个攻击点导入文件名 第二个攻击点导入后缀 开始暴力破解&#xff0c;有成功响应的 拼接到网站后缀后可以直接下载 解压缩后记事本的名字就是flag 总结&#xff1a; …

Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)

效果预览 第一步&#xff1a; 告诉chatgpt&#xff1a; 将latex格式中的英文翻译为中文&#xff08;符号和公式不要动&#xff09;,给出latex格式第二步&#xff1a; Latex 转换为 Word&#xff08;使用GrindEQ &#xff09; 视频 https://www.bilibili.com/video/BV1f242…

X射线衍射全岩分析在岩石学研究中的重要性

X射线衍射全岩分析在岩石学研究中的重要性 X射线衍射&#xff08;XRD&#xff09;全岩分析在岩石学研究中扮演着至关重要的角色&#xff0c;它是一种非破坏性的分析技术&#xff0c;能够提供岩石和矿物的精细结构信息。通过解析材料内部原子排列的特征&#xff0c;XRD不仅揭示了…

12.12 深度学习-卷积的注意力机制-通道注意力SENet

# 告诉模型训练的时候 对某个东西 给予额外的注意 额外的权重参数 分配注意力 # 不重要的就抑制 降低权重参数 比如有些项目颜色重要 有些是形状重要 # 通道注意力 一般都要比较多的通道加注意力 # SENet # 把上层的特征图 自动卷积为 1X1的通道数不变的特征图 然后给每一个…

使用 Python 从 ROS Bag 中提取图像:详解与实现

在机器人应用中&#xff0c;ROS (Robot Operating System) 是一个常见的框架。ROS Bag&#xff08;rosbag&#xff09;是 ROS 中用于记录和回放数据流&#xff08;例如传感器数据、话题消息等&#xff09;的一种强大工具。有时&#xff0c;我们需要将存储在 rosbag 文件中的图像…

【Bolt.new + PromptCoder】三分钟还原油管主页

【Bolt.new PromptCoder】三分钟还原油管主页 PromptCoder官网&#xff1a;PromptCoder Bolt官网&#xff1a;https://bolt.new/ Bolt 是什么&#xff1f; Bolt.new 是一个提供创建全栈网络应用服务的平台。它允许用户通过提示&#xff08;Prompt&#xff09;、运行&#x…

【小白你好】深度学习的认识和应用:CNN、GNN、LSTM、Transformer、GAN与DRL的对比分析

大家好&#xff01;今天我们来聊聊一个热门话题——深度学习。别担心&#xff0c;我会用简单易懂的语言&#xff0c;让每个人都能理解。我们将一起探索什么是深度学习&#xff0c;它有哪些类似的概念&#xff0c;以及其中几种主要的算法&#xff1a;卷积神经网络&#xff08;CN…