C# 在不重新启动服务的情况下添加Redis节点

C# 在不重新启动服务的情况下添加Redis节点,c#,redis,stackexchange.redis,amazon-elasticache,C#,Redis,Stackexchange.redis,Amazon Elasticache,我正在尝试扩展弹性特性,即在现有的Redis集群(非集群模式)中添加/删除节点,AWS的Amazon ElastiCache为我的应用程序提供了该特性。理想情况下,我希望防止任何服务中断,或者必须为更新的端点列表重新启动应用程序。我使用的是StackExchange.Redis包,我看不到从现有连接多路复用器中添加或删除端点的方法 我试图完成的是将端点值放入AWS的参数存储中,这样应用程序可以在向应用程序正在侦听的订阅发送消息时重新加载这些值。应用程序收到该消息后,我将构建一个新的连接对象,设置

我正在尝试扩展弹性特性,即在现有的Redis集群(非集群模式)中添加/删除节点,AWS的Amazon ElastiCache为我的应用程序提供了该特性。理想情况下,我希望防止任何服务中断,或者必须为更新的端点列表重新启动应用程序。我使用的是StackExchange.Redis包,我看不到从现有连接多路复用器中添加或删除端点的方法

我试图完成的是将端点值放入AWS的参数存储中,这样应用程序可以在向应用程序正在侦听的订阅发送消息时重新加载这些值。应用程序收到该消息后,我将构建一个新的连接对象,设置新连接的所有事件处理程序,并通过在更改连接时将静态对象包装在锁块中来替换应用程序正在使用的静态属性

伪代码

  • 从参数存储中提取对象数组

  • 循环遍历数组中的每个对象,并添加到新StackExchange.Redis.ConfigurationOptions对象的端点集合中

  • 将局部变量设置为现有静态连接对象

  • 将静态连接对象设置为传入新StackExchange.Redis.ConnectionMultiplexer对象的新StackExchange.Redis.ConfigurationOptions对象

  • 将所有订阅重新分配给新连接

  • 将所有事件重新分配给新连接

  • 将save和get方法使用的静态数据库对象StackExchange.Redis.IDatabase锁定并重新分配给正在使用的数据库的新连接句柄


  • 使用StackExchange.Redis包是否有更好的方法来实现这一点?

    我认为目前没有更好的方法。有一些支持Sentinel的非官方拉取请求/变体: