Redis连接数与单线程

时间:2018-07-15 22:28:12

标签: multithreading spring-boot redis

我读到Redis是单线程的。

使用jedis客户端(java),我们可以配置池连接,例如:

spring.redis.jedis.pool.max-active=8 # Maximum number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
spring.redis.jedis.pool.max-idle=8 # Maximum number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
spring.redis.jedis.pool.max-wait=-1ms # Maximum amount of time a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
spring.redis.jedis.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.

我知道池连接对于使连接已经打开很重要,因此不花时间再次连接。

想象一下,有8个“客户端请求”使用了所有可用的池,因此将使用8个连接,这些客户端在Redis中执行“ GET”命令。

Redis每次将处理一个线程吗?每个线程都需要等待其他线程完成,因为Redis是单线程吗?在这种情况下,当1个“ GET”正在处理时,其他7个在Redis队列中吗?

如果Redis是单线程, max-active 如何影响Redis性能?

1 个答案:

答案 0 :(得分:0)

Redis只有主循环是单线程。它在单独的线程中使用client buffers来加快处理速度。您花费大多数时间从Redis获取数据是网络时间。他们对此有所帮助。这意味着除非您要存储非常大的对象,否则吞吐量将几乎呈线性增长。

在这里,我为生菜(另一个客户端)测量了不同的设置。我希望“池式”设置与Jedis的设置非常相似:Redis is single thread. Then why should I use lettuce?