Redis是否需要为每个实例新建连接?能否仅使用单个静态连接?
Redis连接使用问题解答
是否需要为每个Redis实例创建新连接?
分两种场景区分:
- 若你指的是独立的Redis服务实例(不同IP/端口的节点、不同Redis集群):是,必须为每个独立的Redis实例单独创建
ConnectionMultiplexer连接对象,单个ConnectionMultiplexer只能绑定一个Redis实例/集群,无法跨实例复用。 - 若你指的是同一个Redis实例下的不同逻辑库(即示例代码中的db0、db1、db2):完全不需要。同一个
ConnectionMultiplexer调用GetDatabase()获取不同逻辑库的操作对象时,复用的是底层同一套连接池,不会产生新的物理连接。
能否仅使用一个静态连接?
可以,这也是官方推荐的最佳实践。ConnectionMultiplexer本身是线程安全的,设计初衷就是全局复用,你可以在程序启动时初始化一次静态的ConnectionMultiplexer实例,整个应用生命周期内都复用这一个对象即可。频繁创建新的ConnectionMultiplexer反而会导致Redis服务端连接数耗尽,拉低性能。
你提供的示例就是正确的用法:
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost"); IDatabase db = redis.GetDatabase(0); IDatabase db = redis.GetDatabase(1); IDatabase db = redis.GetDatabase(2);
如果你的业务涉及多个独立的Redis集群/实例,只需为每个实例单独维护一个静态的ConnectionMultiplexer对象即可,不需要为每次操作新建连接。
内容的提问来源于stack exchange,提问作者John Black
相关产品推荐
相关产品推荐

