单连接 vs 连接池

问题描述 投票:0回答:2

根据lettuce,我们不需要连接池,它使用

single thread safe shared connection
https://github.com/lettuce-io/lettuce-core/wiki/Connection-Pooling

但是,根据 hikari-cp,我们需要有大小合适的连接池

connections = ((core_count * 2) + effective_spindle_count)
https://github.com/brettwoldridge/HikariCP/wiki/About-Pool-Sizing

我很困惑为什么我们在一种情况下不需要池化但在其他情况下需要?

java database connection-pooling hikaricp lettuce
2个回答
1
投票

Hikari 是一个 JDBC 连接池。连接池是必需的,因为数据库有很长的事情要做,并且当该连接打开并运行查询时,您不能对其运行另一个查询,因此最好准备好多个“打开”连接。阅读更多在这里

另一方面,Redis 不是数据库。 Redis 是基于内存存储/缓存的键值,用于快速访问。在那里你不需要连接池,因为它简单快速,你要求 redis 是“key1”存在给我数据,你得到与否。另一方面,对于数据库,您运行长时间运行的 SQL 有时存储过程取决于复杂性,但这不是一步工作。


0
投票

JDBC 是阻塞的,所以一个连接上一次只能有 1 个请求在运行。因此,Hikari 池用于有效地共享多个连接的资源,因此多个线程可以同时发出请求。您需要服务的请求越多,花费的时间越长,您的池就需要越大。

另一方面,Lettuce 是非阻塞的,一个连接可以同时处理多个请求。而且因为连接是线程安全的,连接也可以被多个线程安全地共享。

© www.soinside.com 2019 - 2024. All rights reserved.