Redis连接池理解

https://blog.csdn.net/dreamwbt/article/details/76167340

简述

在学习Redis的时候在博客中发现很多demo涉及到了Redis的连接池(JedisPool ),初次接触比较疑惑,对死磕细节的我造成了比较大的学习阻碍,接下来谈谈我对所谓的连接池的理解。

为什么使用连接池?

首先Redis也是一种数据库,它基于C/S模式,因此如果需要使用必须建立连接,稍微熟悉网络的人应该都清楚地知道为什么需要建立连接,C/S模式本身就是一种远程通信的交互模式,因此Redis服务器可以单独作为一个数据库服务器来独立存在。假设Redis服务器与客户端分处在异地,虽然基于内存的Redis数据库有着超高的性能,但是底层的网络通信却占用了一次数据请求的大量时间,因为每次数据交互都需要先建立连接,假设一次数据交互总共用时30ms,超高性能的Redis数据库处理数据所花的时间可能不到1ms,也即是说前期的连接占用了29ms,连接池则可以实现在客户端建立多个链接并且不释放,当需要使用连接的时候通过一定的算法获取已经建立的连接,使用完了以后则还给连接池,这就免去了数据库连接所占用的时间。

通过连接池获取的Jedis到底是个什么东西?

这是从连接池中获取Jedis连接实例的代码:Jedis resource = jedisPool.getResource();  初次见到的时候对此我有误解,最初的理解是Jedis实例就是一个“数据库”连接(这里强调的是数据库而不是连接),那么多个Jedis岂不是需要多个数据库,然而键值对不都是放在一个数据库当中的么,显然这个逻辑是不成立的。后期的正确理解:这里的连接池跟Hibernate中的C3P0类似,针对同“一个”数据库可以建立多个连接,Jedis从JedisPool中获取的仅仅是一个连接,至于多个连接到达单进程单线程的Redis之后怎么处理则是另外一回事(采用多路IO复用)。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dreamwbt/article/details/76167340

个人分类: Redis

想对作者说点什么? 我来说一句

  • u012012463

    Peiel2018-07-03 18:14:29#4楼

    说的没错啊 我一开始不理解连接Reids为什么需要线程池,Redis是单线程的,多个链接过去还是单线程处理,后来经过学习才有所理解,Redis的性能瓶颈其实就是网络通信,连接池多个连接发送过去的请求可以大大加快网络通信的效率,再加上Redis使用Linux底层多路I/O复用模型,才是Redis高吞吐量的精髓所在。

  • WKX18330698534

    王可欣2018-06-03 20:20:27#3楼

    学习了 之前也接触过连接池但是共鸣不多,再后来接触redis,印象加深了

  • java_zldz_xuws

    xuws2018-04-30 08:26:25#2楼

    你是初学线程池吧?这还要去理解……

    查看回复(1)

  • weixin_30531261

    LLLLLLLLEE2018-03-19 06:37:49#1楼

    赞!!我在学习过程中也在思考这个问题。

猜你喜欢

转载自blog.csdn.net/lppl010_/article/details/81784232