Netty-Redis-Lettuce 关于闲置连接和活动连接的一点心得

2024-06-08 01:18

本文主要是介绍Netty-Redis-Lettuce 关于闲置连接和活动连接的一点心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写netty项目的时候,学习了一下相关的Redis API.(Lettuce框架的)

了解了一下redis缓冲池中的连接分配机制:

拿来与大家分享,简要说明一下,觉得不好的不要喷....

这也是做笔记的一种方式:

(如果有不对的希望大家帮忙指出来 感谢感谢!!)

 

//redis pool
private static final RedisConnectionPool<RedisAsyncCommands<String, String>>  pool;//init pool
static {//创建一个RedisURI对象 并为其设置必要的参数RedisURI redisURI = new RedisURI();redisURI.setHost( ConstUtil.REDIS_HOST );redisURI.setPort( ConstUtil.REDIS_PORT );redisURI.setPassword( ConstUtil.REDIS_PASSWORD );redisURI.setTimeout( ConstUtil.REDIS_EXPIRE );redisURI.setUnit( TimeUnit.SECONDS );//也可直接将url的字符串传入 RedisClient.create()方法中  eg:redis://[password@]host[:port][/databaseNumber]RedisClient client = RedisClient.create( redisURI );//从redis客户端中获取一个异步的redis缓冲池pool = client.asyncPool( ConstUtil.REDIS_MAX_IDLE, ConstUtil.REDIS_MAX_ACTIVE );//参数说明:REDIS_MAX_IDLE 为本缓冲池中最大闲置连接数量 REDIS_MAX_ACTIVE 为本缓冲池中最大活动连接数量
}//从缓冲池中获取一个连接
public static RedisAsyncCommands<String, String> getRedisConnection() {return pool.allocateConnection();
}//关闭服务器时 关闭缓冲池
public static void shutDown(){pool.close();
}//以下为测试代码
public static void main( String[] args ) {//RedisAsyncCommands<String, String> commands = getRedisConnection();//RedisAsyncCommands<String, String> commands1 = getRedisConnection();RedisURI redisURI = new RedisURI();redisURI.setHost( ConstUtil.REDIS_HOST );redisURI.setPort( ConstUtil.REDIS_PORT );redisURI.setPassword( ConstUtil.REDIS_PASSWORD );redisURI.setTimeout( ConstUtil.REDIS_EXPIRE );redisURI.setUnit( TimeUnit.SECONDS );RedisClient client = RedisClient.create( redisURI );//此处将redis缓冲池中 最大闲置连接数量控制为1RedisConnectionPool<RedisAsyncCommands<String, String>> pool = client.asyncPool( 1, ConstUtil.REDIS_MAX_ACTIVE );//打印当前缓冲池中的 连接情况 活动连接为0 闲置连接也为0System.out.println("Before NumActive is: " + pool.getNumActive() + " NumIdel is: " +pool.getNumIdle());//此处使用try(){}语句块获得一个新连接try(RedisAsyncCommands<String, String> connection = pool.allocateConnection()){connection.get( "key" );//该连接当前状态为ALLOCATED//此处加断点可观察到该连接为 1e8b7643System.out.println("call try-catch");}//由于RedisAsyncCommands继承了closeable接口 所以此处语句块执行完毕后connection将被自动关闭 缓冲池中连接为1e8b7643 当前状态为IDLE//打印当前缓冲池中的 连接情况 活动连接为0 闲置连接也为1 System.out.println( "After call{ 01 } NumActive is: " + pool.getNumActive() + " NumIdel is: " + pool.getNumIdle() );//此处使用try(){}语句块获得一个连接try(RedisAsyncCommands<String, String> connection = pool.allocateConnection()){//此处返回连接为 1e8b7643 为刚才的连接  当前状态为ALLOCATEDconnection.get( "key" ); System.out.println( "call try-catch" );try(RedisAsyncCommands<String, String> connection2 = pool.allocateConnection()){//此处返回一个新的连接为 3f57bcadconnection2.get( "key" );System.out.println("call try-catch");}//此处释放connection2 System.out.println("isAuto-close?”);//此处添加断点 缓存池中连接为 3f57bcad 状态为 IDLE}//打印当前缓冲池中的 连接情况 活动连接为0 闲置连接也为1 System.out.println( "After call{ 02 } NumActive is: " + pool.getNumActive() + " NumIdel is: " + pool.getNumIdle() );//此处使用try(){}语句块获得一个连接 该链接为3f57bcad 由此可见先被放回缓冲池的连接 状态由ALLOCATED 置为 IDLE后被释放的连接如果缓存池中的闲置连接数量达到了设置的最大闲置数量 则不放入缓冲池作为IDLE连接try(RedisAsyncCommands<String, String> connection = pool.allocateConnection()){connection.get( "key" );System.out.println("call try-catch");}//pool.close();//打印当前缓冲池中的 连接情况 活动连接为0 闲置连接也为1     System.out.println( "After call{ 03 } NumActive is: " + pool.getNumActive() + " NumIdel is: " + pool.getNumIdle() );RedisConnectionPool<RedisAsyncCommands<String, String>> pool2 = client.asyncPool( 1, ConstUtil.REDIS_MAX_ACTIVE );RedisAsyncCommands<String, String> connection = pool2.allocateConnection();connection.get( "key" );System.out.println( "unused TRY Before NumActive is: " + pool2.getNumActive() + " NumIdel is: " + pool2.getNumIdle() );pool2.freeConnection( connection );System.out.println( "unused TRY After call{ 03 } NumActive is: " + pool2.getNumActive() + " NumIdel is: " + pool2.getNumIdle() );}

 

 

 

这篇关于Netty-Redis-Lettuce 关于闲置连接和活动连接的一点心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040842

相关文章

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

SpringBoot集成Netty,Handler中@Autowired注解为空

最近建了个技术交流群,然后好多小伙伴都问关于Netty的问题,尤其今天的问题最特殊,功能大概是要在Netty接收消息时把数据写入数据库,那个小伙伴用的是 Spring Boot + MyBatis + Netty,所以就碰到了Handler中@Autowired注解为空的问题 参考了一些大神的博文,Spring Boot非controller使用@Autowired注解注入为null的问题,得到

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

为什么要做Redis分区和分片

Redis分区(Partitioning)和分片(Sharding)是将数据分布在多个Redis实例或多个节点上的做法。这种技术用于提高性能、可扩展性和可用性。以下是执行Redis分区和分片的主要原因: 1. **提高吞吐量**:    - 通过将数据分散到多个节点,可以并行处理更多的操作,从而提高整体吞吐量。 2. **内存限制**:    - 单个Redis实例的内存是有限的。分区允许数据

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

Redis-在springboot环境下执行lua脚本

文章目录 1、什么lua2、创建SpringBoot工程3、引入相关依赖4、创建LUA脚本5、创建配置类6、创建启动类7、创建测试类 1、什么lua “Lua”的英文全称是“Lightweight Userdata Abstraction Layer”,意思是“轻量级用户数据抽象层”。 2、创建SpringBoot工程 3、引入相关依赖 <?xml version

神经网络第一篇:激活函数是连接感知机和神经网络的桥梁

前面发布的文章介绍了感知机,了解了感知机可以通过叠加层表示复杂的函数。遗憾的是,设定合适的、能符合预期的输入与输出的权重,是由人工进行的。从本章开始,将进入神经网络的学习,首先介绍激活函数,因为它是连接感知机和神经网络的桥梁。如果读者认知阅读了本专题知识,相信你必有收获。 感知机数学表达式的简化 前面我们介绍了用感知机接收两个输入信号的数学表示如下: