【Redis 神秘大陆】008 常见Java客户端

八、Redis 的 Java 客户端

8.1 Jedis

连接池

单点连接池
  • Jedis 连接池基于 Common-Pool

img

连接池里面放置的是空闲连接,如果被使用 (borrow)掉,连接池就会少一个连接,连接使用完后进行放回 (return),连接池会增加一个可用连接。如果没有可用连接,便会新建连接

sharding 连接池

img

  • 比如有两个redis服务进程(redis1, redis2),对key按照sharding策略选择访问哪一个redis。相较于单点连接池,sharding连接池里面的连接为redis1和redis2两个连接。每次申请使用一个连接,实际上是拿到了两个不同的连接,然后通过sharding选择具体访 问哪一个redis。
  • 该方案的缺点是会造成连接的浪费,比如需要访问redis1, 但是实际上也占用redis2的连接
Cluster 连接池

img

在客户端启动的时候,会从某一个redis 服务上面,获取到后端cluster集群上面所有的redis服务列表【cluster info】(比如redis1 和redis2),并且对每一个redis服务建立独立的连接池。如果访问后端 redis服务,会先通过CRC16计算访问的key确定slot,再通过slot选择对应的 连接池(比如redis1的pool),再从对应的连接池里面获取连接,访问后端 服务。

参数优化方式

  • https://help.aliyun.com/zh/redis/use-cases/jedispool-optimization
    public static class JedisPool {
        /**
         * 最大空闲连接数,不能超过Redis 实例的最大连接数
         */
        private int maxIdle = 10;

        /**
         * 最小空闲连接数,不能超过Redis 实例的最大连接数
         */
        private int minIdle = 10;

        /**
         * 最大连接数,不能超过Redis 实例的最大连接数 线上规格最大连接数 6W ,期望QPS 20W,两分片,单个redis  10W ,一次 Redis 平均耗时 1ms ,一个链接的QPS 大约是 1s/1ms =
         * 1000, 最多允许的是= 10W/1000=100,当前设置为40
         */
        private int maxTotal = 40;

        /**
         * 获取连接时的最大等待毫秒数,如果超时就抛异常
         */
        private int maxWaitMillis = 1000;

        /**
         * 在获取连接的时候检查有效性, 默认false,业务量大的时候减少一次 ping 的开销
         */
        private boolean testOnBorrow = false;

        /**
         * 在空闲时检查有效性, 默认false,业务量大的时候减少一次 ping 的开销
         */
        private boolean testOnReturn = false;
    }
  • 连接池具体实现逻辑: org.apache.commons.pool2.impl.GenericObjectPool#borrowObject(long)
  • Redisson

问题和解决方式

  1. 无法从连接池获取到连接
  • 原因可能包括连接池设置过小、未正确释放连接、存在慢查询操作、或者服务端阻塞等。
  • 解决方法包括适当增加连接池大小、正确释放连接、优化慢查询操作以及排查服务端问题。
  1. 客户端读写超时
  • 可能由于读写超时设置过短、命令执行缓慢、网络异常或Redis服务端阻塞等原因导致。
  • 解决方法包括调整超时设置、优化命令执行、排查网络异常或服务端问题。
  1. 客户端连接超时
  • 可能由于连接超时设置过短、Redis服务端阻塞或网络异常等原因导致。
  • 解决方法包括调整连接超时设置、排查网络异常或服务端问题。
  1. 客户端缓冲区异常
  • 可能由于输出缓冲区满、长时间闲置连接被服务端主动断开或并发读写等原因导致。
  • 解决方法包括调整缓冲区设置、合理管理连接、排查服务端问题。
  1. Lua脚本正在执行
  • 若Redis正在执行Lua脚本并超过了限制时间,会导致异常。
  • 解决方法是等待Lua脚本执行完毕或手动终止执行。
  1. Redis正在加载持久化文件
  • 若Redis正在加载持久化文件,则客户端无法执行命令。
  • 解决方法是等待持久化加载完成。
  1. Redis使用的内存超过maxmemory配置
  • 若Redis使用内存超过maxmemory设置,则无法执行命令。
  • 解决方法包括调整maxmemory设置和排查内存使用情况。
  1. 客户端连接数过大
  • 若客户端连接数超过maxclients设置,则无法建立新连接。
  • 解决方法包括调整maxclients设置、排查客户端连接数过多的原因,并可能考虑故障转移。

千万不要使用 Lettue

分布式锁

在这里插入图片描述


当你发现这些内容对你有帮助时,为了支持我的工作,不妨给一个免费的⭐Star,这将是对我最大的鼓励!感谢你的陪伴与支持!一起在技术的路上共同成长吧!点击链接:GitHub | Gitee

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HCIA-Datacom实验_05_实验三:OSPF路由协议基础实验

一、实验拓扑 二、实验步骤 (一)修改设备名称、配置接口IP、Loopback口IP R1 R2 R3 (二)配置OSPF R1 R2 R3 (三)配置认证 R1 R2 R3

【学习笔记八】EWM仓库流程类型的后台配置和前台测试

一、仓库流程类型概述 仓库流程类型(Warehouse Process Types),简称WPT 在SAP扩展仓库管理(SAPEWM)中,WPT控制仓库内每个流程的活动或移动(如收货、发货、过帐更改)。仓库流程类型被分配给每个仓库请求项目…

【机器学习】贝叶斯算法在机器学习中的应用与实例分析

贝叶斯算法在机器学习中的应用与实例分析 一、贝叶斯算法原理及重要性二、朴素贝叶斯分类器的实现三、贝叶斯网络在自然语言处理中的应用四、总结与展望 在人工智能的浪潮中,机器学习以其独特的魅力引领着科技领域的创新。其中,贝叶斯算法以其概率推理的…

1、MYSQL系列-深入理解Mysql索引底层数据结构与算法

索引的本质 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构 二叉树红黑树Hash表BTree B-Tree B-Tree 叶节点具有相同的深度,叶节点的指针为空,所有索引元素不重复,节点中的数据索引从左到右递增排列 BTree(B-Tree变种) 非叶…

DataGrip2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 DataGrip是由JetBrains公司开发的一款强大的关系数据库集成开发环境(IDE),专为数据库开发人员和数据库管理员设计。它提供了一个统一的界面,用于管理和开发各种关系型数据库&#x…

Linux内核之WRITE_ONCE用法实例(四十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

stm32实现hid键盘

前面的cubelmx项目配置参考 stm32实现hid鼠标-CSDN博客https://blog.csdn.net/anlog/article/details/137814494?spm1001.2014.3001.5502两个项目的配置完全相同。 代码 引用 键盘代码: 替换hid设备描述符 先屏蔽鼠标设备描述符 替换为键盘设备描述符 修改宏定…

深度学习 Lecture 7 迁移学习、精确率、召回率和F1评分

一、迁移学习(Transfer learning) 用来自不同任务的数据来帮助我解决当前任务。 场景:比如现在我想要识别从0到9度手写数字,但是我没有那么多手写数字的带标签数据。我可以找到一个很大的数据集,比如有一百万张图片的猫、狗、汽…

基于Adaboost模型的数据预测和分类matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 AdaBoost(Adaptive Boosting)是一种集成学习方法,由Yoav Freund和Robert Schapire于1995年提出,主要用于提高弱分类…

UML 介绍

前言 UML 简介。 文章目录 前言一、简介1、事务2、关系1)依赖2)关联聚合组合 3)泛化4)实现 二、类图三、对象图四、用例图五、交互图1、序列图(顺序图)2、通信图 六、状态图七、活动图八、构件图&#xff0…

详解UART通信协议以及FPGA实现

文章目录 一、UART概述二、UART协议帧格式2.1 波特率2.2 奇校验ODD2.3 偶校验EVEN 三、UART接收器设计3.1 接收时序图3.2 Verilog代码3.3 仿真文件测试3.4 仿真结果3.5 上版测试 四、UART发送器设计4.1 发送时序图4.2 Verilog代码4.3 仿真文件测试4.4 仿真结果4.5 上板测试 五、…

HarmonyOS开发实战:【亲子拼图游戏】

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式益智拼图游戏,可以两台设备同时开启一局拼图游戏,每次点击九宫格内的图片,都会同步更新两台设备的图片位置。效果图如下: 说明: 本示例涉及使…

2016NOIP普及组真题 1. 金币

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1969 核心思想&#xff1a; 解法1、由于数据量只有 10000 天&#xff0c;估可以采用 模拟每一天 的方式。 #include <bits/stdc.h> using namespace std;int k 0;int main() {i…

SpringBoot项目基于java的教学辅助平台

采用技术 SpringBoot项目基于java的教学辅助平台的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 学生信息管理 教师信息管理 课程信息管理 科目分类管…

【面试经典 150 | 链表】K 个一组翻转链表

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…

xxl-job使用自动注册节点,ip不对,如何解决????

很明显这时我们本机的ip和我们xxl-job自动注册的ip是不一致的&#xff0c;此时该如何处理呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; 方法一&#xff1a;在配置文件中&#xff0c;将我们的ip固定写好。 ### xxl-job executor server-info xxl.job.executor.ip写你的…

pandas基本用法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas的数据结构1、一维数组pd.Series1.1 pd.Series&#xff08;data,index,dtype&#xff09;示例1&#xff1a;不定义index示例2&#xff1a;自定义inde…

基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于HMM隐马尔可夫模型的金融数据预测算法.程序实现HMM模型的训练&#xff0c;使用训练后的模型进行预测。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运…

excel 无法正确处理 1900-03-01 前的日期

问题由来&#xff1a;excel 用公式 TEXT(A1,"yyyy-mm-dd") 转日期时&#xff0c;当A1 的值等于59 的时候&#xff0c;返回值是1900-02-28&#xff1b;当A1 的值等于61 的时候&#xff0c;返回值是1900-03-01&#xff1b;那么当 A1的值为 60 的时候&#xff0c;返回值…

数图智慧零售解决方案,赋能零售行业空间资源价值最大化

数图智慧零售解决方案 赋能零售行业空间资源价值最大 在激烈的市场竞争中&#xff0c;如何更好地提升空间资源价值&#xff0c;提高销售额&#xff0c;成为行业关注的焦点。近日&#xff0c;NIQ发布的《2024年中国饮料行业趋势与展望》称&#xff0c;“在传统零售业态店内&…