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

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核