【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.mzph.cn/news/821831.shtml

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

相关文章

【大语言模型】如何让ChatGPT等LLM拥有记忆

我们现在在跟ChatGPT等生成式人工智能聊天时,都需要我们给定一个上下文,生成式AI才会根据我们问题结合上下文给出回答,他们并没有任何记忆。想象一下未来我们有一个AI机器人在我们的身边,每天它的记忆都会归零,你必须跟…

基于afx透明视频的视觉增强前端方案

作者 | 青玉 导读 本文介绍了增长前端团队自研的Webview框架下透明视频视觉增强方案,该方案在保证对视觉进行高度还原的同时可投入更少的开发成本,还能获得更优的前端性能表现。文章首先分析了市面上动画方案的优缺点,然后详细介绍了透明视频…

【备忘】利用FFMpeg读取视频第一帧作为封面

前言 以前做过类似项目,当时是利用php 执行cli命令的方式去读取视频第一帧,现在2024年了服务器环境的升级再使用这种方式也不好了,现在用新的方式去实现这个简单的功能。(有点困了不想写了) 实现步骤 前提要先安装f…

开发语言漫谈-rust

前面介绍C语言家族时忘掉了rust,紧急补一篇。我们称C语言家族是指他们的语法相似,类似这样的: if(){}else{}就是C家族的。C、C的传统领域就是系统底层、硬件接口方向。C/C没有垃圾内存回收机制,完全靠程序员的自觉天赋&#xff0…

Blender生成COLMAP数据集

最近在做3DGS方向,整理了一下Blender生成自己的数据集。 1 Introduction 在Blender中构建场景(light, object, camera),利用Blender的python脚本对其渲染,导出多视角下渲染出的RGB图和depth map,并将trans…

SpingBoot3相关

一、SpringBoot3-AOT与JIT介绍 1.1 AOT与JIT JIT(Just-in-Time,实时编译)Java跨平台的基础 AOT(Ahead-of-Time,预编译或提前编译),无法跨平台 1.2 AOT的优点 启动和运行速度快:传…

OpenHarmony开发实例:【新闻客户端】

介绍 本篇Codelab我们将教会大家如何构建一个简易的OpenHarmony新闻客户端(JS版本)。应用包含两级页面,分别是主页面和详情页面,两个页面都展示了丰富的UI组件,其中详情页的实现逻辑中还展示了如何通过调用相应接口&a…

BetterDisplay Pro for Mac 显示器校准和优化软件

BetterDisplay Pro for Mac是一款适用于Mac电脑的显示器校准和优化软件。它可以帮助用户校准显示器的颜色、亮度、对比度和伽马值等参数,使得显示器更加准确和清晰,提高用户的工作效率。 BetterDisplay Pro for Mac v2.0.11激活版下载 这款软件具有直观的…

RUST腐蚀服务器添加 TAGS标签教程

RUST腐蚀服务器添加 TAGS标签教程 大家好我是艾西,一个做服务器租用的网络架构师。我们自己搭建架设的服务器在steam展示面板看到跟别人的不一样是咋回事? 这个其实就是服务器的一个标签,那么主要的作用就是让大家在选择服务器时更快更直接的…

pyqt5中sys.argv和app.exec_()是什么意思

在Python的PyQt程序中,sys.argv 和 app.exec_() 是与程序启动和事件循环处理相关的两个概念。 sys.argv: sys 是Python标准库中的一个模块,它提供了一些函数和变量,用来与Python解释器进行交互。argv 是sys模块中的一个列表,它包含…

景区导览系统平台|智能导览|数字人导游|VR游园

随着人工智能、元宇宙等技术的飞速发展,文旅行业正迎来一场前所未有的变革。道可云文旅元宇宙平台以其独特的智慧景区导览系统、元宇宙空间以及数字人导游等创新应用,为景区和游客带来了全新的旅游体验,也标志着文旅行业正式步入了元宇宙时代…

目标检测YOLO实战应用案例100讲-基于特征融合和预测细化的遥感图像目标检测(下)

目录 4.2 无锚方法CenterNet概述 4.3 特征增强和预测细化网络 4.3.1 中间监督的堆叠沙漏网络

课时97:脚本自动化_expect_语法实践

2.2.2 语法实践 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 赋值语法 赋值:tcl 使用“set”关键字来定义参数,不必指定变量值的类型,因为变量值的类型仅一种——字符串 样式:set varName …

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

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

Linux crontab命令教程:如何设置和管理定时任务(附实例详解和注意事项)

Linux crontab命令介绍 crontab(全称:cron table),是Linux系统中用来定期执行任务的命令。它允许用户添加、删除或修改定时任务。crontab命令的名字来源于“cron table”,因为它使用了名为cron的任务调度程序来执行任…

计算机视觉动作识别——YOWO用于实时时空动作定位与识别的算法解析

摘要 时空动作定位要求将两种信息源整合到设计的架构中:(1) 来自先前帧的时间信息和(2) 来自关键帧的空间信息。当前的最先进方法通常使用单独的网络提取这些信息,并使用额外的机制进行融合以获得检测结果。YOWO是一个用于视频流中实时时空动作定位的统…

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

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

分析ARP解析过程

1、实验环境 主机A和主机B连接到交换机,并与一台路由器互连,如图7.17所示,路由器充当网关。 图7.17 实验案例一示意图 2、需求描述 查看 ARP 相关信息,熟悉在PC 和 Cisco 设备上的常用命令,设置主机A和主机B为同一个网段网关设置为路由接…

idea 热部署插件JRebel

idea 热部署插件JRebel ​ 当开始开发web项目的时候,需要频繁的修改web页面,此时如果频繁的重启变得很麻烦,因此,可以在idea中集成JRebel插件,改动代码之后不需要重新启动应用程序。 1、安装JRebel ​ (…

web server apache tomcat11-01-官方文档入门介绍

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 同时也为从零手写实现 tomcat 提供一些基础和特性的思路。 minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apac…