写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缓冲池中 最大闲置连接数量控制为1 RedisConnectionPool<RedisAsyncCommands<String, String>> pool = client.asyncPool( 1, ConstUtil.REDIS_MAX_ACTIVE ); //打印当前缓冲池中的 连接情况 活动连接为0 闲置连接也为0 System.out.println("Before NumActive is: " + pool.getNumActive() + " NumIdel is: " +pool.getNumIdle()); //此处使用try(){}语句块获得一个新连接 try(RedisAsyncCommands<String, String> connection = pool.allocateConnection()){ connection.get( "key" );//该连接当前状态为ALLOCATED //此处加断点可观察到该连接为 1e8b7643 System.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 为刚才的连接 当前状态为ALLOCATED connection.get( "key" ); System.out.println( "call try-catch" ); try(RedisAsyncCommands<String, String> connection2 = pool.allocateConnection()){//此处返回一个新的连接为 3f57bcad connection2.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() ); }
相关推荐
赠送jar包:netty-codec-redis-4.1.73.Final.jar; 赠送原API文档:netty-codec-redis-4.1.73.Final-javadoc.jar; 赠送源代码:netty-codec-redis-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-codec-...
赠送jar包:netty-codec-redis-4.1.74.Final.jar; 赠送原API文档:netty-codec-redis-4.1.74.Final-javadoc.jar; 赠送源代码:netty-codec-redis-4.1.74.Final-sources.jar; 赠送Maven依赖信息文件:netty-codec-...
【书籍学习】Netty、Redis、Zookeeper高并发实战-netty-redis-zookeeper # netty-redis-zookeeper 【书籍学习】Netty、Redis、Zookeeper高并发实战
在学习"Netty-Redis-Zookeeper高并发实战"的过程中,你可能会涉及到以下知识点: 1. Netty的基本概念和原理,包括其事件循环模型、ByteBuf的使用以及自定义编解码器的实现。 2. Redis的数据结构及其应用场景,如...
赠送jar包:netty-codec-redis-4.1.73.Final.jar; 赠送原API文档:netty-codec-redis-4.1.73.Final-javadoc.jar; 赠送源代码:netty-codec-redis-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-codec-...
赠送jar包:netty-codec-redis-4.1.74.Final.jar; 赠送原API文档:netty-codec-redis-4.1.74.Final-javadoc.jar; 赠送源代码:netty-codec-redis-4.1.74.Final-sources.jar; 赠送Maven依赖信息文件:netty-codec-...
netty-codec-redis-4.1.32.Final-sources.jar netty-codec-redis-4.1.32.Final.jar netty-codec-socks-4.1.32.Final-sources.jar netty-codec-socks-4.1.32.Final.jar netty-codec-stomp-4.1.32.Final-sources.jar ...
netty-socketio-netty-socketio-2.0.6 ,Socket.IO 是一个库,可以在客户端和服务器之间实现低延迟, 双向和基于事件的通信:netty-socketio-netty-socketio-2.0.6.tar.gznetty-socketio-netty-socketio-2.0.6.zip
赠送jar包:reactor-netty-core-1.0.15.jar; 赠送原API文档:reactor-netty-core-1.0.15-javadoc.jar; 赠送源代码:reactor-netty-core-1.0.15-sources.jar; 赠送Maven依赖信息文件:reactor-netty-core-1.0.15....
赠送jar包:reactor-netty-http-1.0.11.jar; 赠送原API文档:reactor-netty-http-1.0.11-javadoc.jar; 赠送源代码:reactor-netty-http-1.0.11-sources.jar; 赠送Maven依赖信息文件:reactor-netty-...
赠送jar包:netty-transport-classes-epoll-4.1.73.Final.jar; 赠送原API文档:netty-transport-classes-epoll-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-classes-epoll-4.1.73.Final-sources.jar;...
在实际项目中,Netty可以用来构建高效的微服务通信框架,Redis作为数据缓存和消息队列,ZooKeeper则负责服务发现和分布式协调。这样的组合可以有效应对高并发场景,提高系统的伸缩性和稳定性,同时降低延迟,提升...
赠送jar包:netty-codec-mqtt-4.1.73.Final.jar; 赠送原API文档:netty-codec-mqtt-4.1.73.Final-javadoc.jar; 赠送源代码:netty-codec-mqtt-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-codec-...
赠送jar包:netty-all-4.1.68.Final.jar; 赠送原API文档:netty-all-4.1.68.Final-javadoc.jar; 赠送源代码:netty-all-4.1.68.Final-sources.jar; 赠送Maven依赖信息文件:netty-all-4.1.68.Final.pom; 包含...
赠送jar包:netty-transport-rxtx-4.1.74.Final.jar; 赠送原API文档:netty-transport-rxtx-4.1.74.Final-javadoc.jar; 赠送源代码:netty-transport-rxtx-4.1.74.Final-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:netty-transport-classes-epoll-4.1.74.Final.jar; 赠送原API文档:netty-transport-classes-epoll-4.1.74.Final-javadoc.jar; 赠送源代码:netty-transport-classes-epoll-4.1.74.Final-sources.jar;...
Netty (netty-netty-5.0.0.Alpha2.tar.gz)是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。 “快速和简单”并...
赠送jar包:reactor-netty-http-1.0.15.jar; 赠送原API文档:reactor-netty-http-1.0.15-javadoc.jar; 赠送源代码:reactor-netty-http-1.0.15-sources.jar; 赠送Maven依赖信息文件:reactor-netty-...
赠送jar包:netty-transport-native-unix-common-4.1.74.Final.jar; 赠送原API文档:netty-transport-native-unix-common-4.1.74.Final-javadoc.jar; 赠送源代码:netty-transport-native-unix-common-4.1.74....
赠送jar包:netty-transport-native-unix-common-4.1.73.Final.jar; 赠送原API文档:netty-transport-native-unix-common-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-native-unix-common-4.1.73....