连接池和多路复用
高效管理 Redis 连接
Redis 示例代码通常会打开一个连接,演示 命令或功能,然后关闭。实际代码通常 与服务器进行短暂的通信突发,并且周期为 两者之间不活跃。打开和关闭连接 涉及一些开销,如果这样做,会导致效率低下 它经常。这意味着您可以提高生产性能 通过建立尽可能少的单独连接来编写代码。
在您自己的代码中管理连接可能很棘手,因此 Redis
客户端库为您提供了一些帮助。实现
连接管理称为连接池和多路复用。
这redis-py
,jedis
和go-redis
客户支持
连接池,而NRedisStack
支持多路复用。Lettuce
支持这两种方法。
连接池
初始化连接池时,客户端会打开一个小数字 的连接,并将它们添加到池中。
每次 “打开” 连接时 从池中,客户端返回以下现有 连接并记录它正在使用的事实。
当您稍后 “关闭” 时 连接,客户端会将其放回 available 连接,但实际上没有关闭它。
如果池中的所有连接都在使用中,但应用程序需要更多连接,则 客户端可以根据需要简单地打开新连接。这样,客户端 最终找到正确数量的连接来满足您的 app 的需求。
多路复用
多路复用器不是池化多个连接,而是保持 单个连接打开,并将其用于 client 和 server。返回到代码的 “connections” 是 用于确定将命令的响应数据发送到何处。
请注意,如果多路复用器在附近收到多个命令,则不是问题 一起在时间里。发生这种情况时,多路复用器通常可以将命令合并到一个管道中,该管道 提高效率。
多路复用提供高效率,但无需
任何特殊代码来在您的应用程序中启用它。与多路复用相比,多路检测的主要缺点
连接池是它不能支持阻止 “pop” 命令(例如BLPOP
),因为这些会使
所有调用方的 connection。