ConnectionMultiplexer可以连接到服务器群集,但这仅用于同一数据集的故障转移/负载平衡/复制。
如果您只想对键进行逻辑分离,Redis内部有8个数据库。您拥有其他存储代码只能调用 _muxer.GetDatabase(3) 例如,您可以使用相同的服务器。
_muxer.GetDatabase(3)
如果你有另一个想要单独服务器的原因,我会创建一个不同的包装器类/接口。包装类可以新增一个 ConnectionMultiplexer 并注入Singleton范围。你最终有两个多路复用器的实例,但这不是一个大问题,要避免的主要是新的很多,例如每次调用。
ConnectionMultiplexer
public Interface IOtherStorage { void StoreItem(string key, string value); } public class OtherStorage : IOtherStorage { private IConnectionMultiplexer _muxer; public OtherStorage(string connection) { _muxer = ConnectionMultiplexer.Connection(connection) } public void StoreItem(string key, string value) { _muxer.GetDatabase().StringSet(key, value); } }
在创业公司
services.AddSingleton<IOtherStorage>(c => new OtherStorage("server2:6279");
或者只是拥有一个单身人士 ConnectionMultiplexer 厂:
public class ConnectionFactory { private Lazy<ConnectionMultiplexer> _cnn1 { get; set; } private Lazy<ConnectionMultiplexer> _cnn2 { get; set;} public ConnectionFactory(string cnn1, string cnn2) { _cnn1 = new Lazy<UserQuery.ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(cnn1)); _cnn2 = new Lazy<UserQuery.ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(cnn2)); } public ConnectionMultiplexer GetConnection1() { return _cnn1.Value; } public ConnectionMultiplexer GetConnection2() { return _cnn2.Value; } }
并注册如下:
var factory = new ConnectionFactory("server1:6379", "server2:6379"); services.AddSingleton(factory); var cm1 = factory.GetConnection1(); var cm2 = factory.GetConnection2(); ....