【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

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

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

相关文章

UbuntuServer22.04安装docker

通过ubuntuserver安装docker是搭建开发环境最便捷的方式之一。下面介绍一下再ubuntu22.04上如何安装docker。相关内容参考官网链接:Install Docker Engine on Ubuntu 根据官网推荐,利用apt命令的方式安装,首先需要设置docker仓库&#xff0c…

ES源码二:集群启动过程

命令行参数解析 Elasticsearch:在main里面创建了Elasticsearch实例,然后调用了main方法,这个main方法最终会调用到父类Command的main方法 这里做了几件事: 注册一个 ShutdownHook,其作用就是在系统关闭的时候捕获IO…

目标检测算法——YOLOV9——算法详解

一、主要贡献 深度网络输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息。针对 信息丢失问题,研究问题如下: 1)从可逆功能的角度对现有深度神经网络架构进行了理论分析,解释了许多过去难以解释的现象&#xf…

【网络编程】如何创建一个自己的并发服务器?

hello !大家好呀! 欢迎大家来到我的网络编程系列之如何创建一个自己的并发服务器,在这篇文章中,你将会学习到在Linux内核中如何创建一个自己的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家…

3D目标检测实用技巧(三)- 生成虚拟点

一、引言 本次参考的是VirConv生成虚拟点的方法: VirConv/tools/PENet at master hailanyi/VirConv GitHubVirtual Sparse Convolution for Multimodal 3D Object Detection - VirConv/tools/PENet at master hailanyi/VirConvhttps://github.com/hailanyi/Vir…

手写spring IOC底层源码来模拟spring如何利用多级缓存解决循环依赖的问题

在文章开始之前,先来看一张spring IOC加载过程的脑图吧 Spring IOC的加载过程 首先,当我们去new了一个applicationContext,它底层呢就会把我们配置的bean进行扫描,然后创建成一个一个的beanDefinition放在我们的beanDefinitionMap中,此时就有了一切创造bean的原料信…

计算机网络:MAC地址 IP地址 ARP协议

计算机网络:MAC地址 & IP地址 & ARP协议 MAC地址IP地址ARP协议 MAC地址 如果两台主机通过一条链路通信,它们不需要使用地址就可以通信,因为连接在信道上的主机只有他们两个。换句话说,使用点对点信道的数据链路层不需要使…

宝剑锋从磨砺出,透视雀巢咖啡品牌焕新与产品升级的想象力

自1989年进入中国市场以来,陪伴着国内咖啡行业由启蒙期走向兴盛期的雀巢咖啡,始终坚持以消费者高品质、个性化需求为本位,在保有独特性的基础上持续创新,实现了从无到有的攻克与突破。 近日,深耕中国三十六载的雀巢咖…

2024蓝桥杯每日一题(组合计数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:计算系数 试题二:求组合数1 试题三:求组合数2 试题四:杨辉三角形 试题一:计算系数 【题目描述】 给定一个多项式 (axby)k,请…

数字革命的先锋:Web3对社会的影响

引言 在信息技术飞速发展的当下,Web3作为一个新兴的互联网模式,正在逐渐改变我们的生活方式、商业模式和社会结构。本文将深入探讨Web3的核心特点、它在各个领域中的应用以及对社会产生的深远影响。 1. Web3的核心特点 1.1 去中心化 Web3强调去中心化…

电脑不能上网,宽带调制解调器出现问题如何处理

目录 一、问题说明 二、解决方案 一、问题说明 内网的设备能互联,内网的各个设备无法连外网。 电脑在检测网络时,出现以下提示: 二、解决方案 首先重启光猫(我们是电信宽带)。 如果还是有问题,再重启…

【Blockchain】连接智能合约与现实世界的桥梁Chainlink

去中心化预言机试图实现依赖因果关系而不是个人关系的去信任和确定性结果。它以与区块链网络相同的方式实现这些结果,即在许多网络参与者之间分配信任。通过利用许多不同的数据源并实施不受单个实体控制的预言机系统,去中心化的预言机网络有可能为智能合…