ConnectionMultiplexer是StackExchange.Redis的核心对象,ConnectionMultiplexer 应被多个调用之间共享使用。不需要为每个操作创建一个 ConnectionMultiplexer,它是完全线程安全的。可以通过使用 ConnectionMultiplexer.Connect 或 ConnectionMultiplexer.ConnectAsync 创建连接对象,并传入配置字符串或 ConfigurationOptions对象。 配置字符串可以采用一系列逗号分隔的节点的形式:
创建连接:
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,password=123456");
有了ConnectionMultiplexer之后,你可能需要做以下三件事:
- 访问 redis 数据库(使用集群时,单个逻辑数据库可能分布在多个节点上)
- 使用 redis 的发布/订阅功能
- 访问单独服务器以进行维护/监视
使用redis数据库
IDatabase db = redis.GetDatabase();
从GetDatabase返回的对象是一个成本很低的通道对象,不需要存储。redis 支持多个数据库,可以在GetDatabase的参数中指定,默认是0。
得到IDatabase后,就可以使用 redis API。 请注意,所有方法都具有同步和异步实现。
最简单的操作是存储和检索值:
string value = "abcdefg";
db.StringSet("mykey", value);
...
string value = db.StringGet("mykey");
Console.WriteLine(value); // writes: "abcdefg"
发布订阅
redis 的另一个常见用法是作为 发布/订阅消息分发工具。
并且在连接失败的情况下,ConnectionMultiplexer 将处理重新订阅所请求的信道的所有细节。
ISubscriber sub = redis.GetSubscriber();
同样,从 GetSubscriber 返回的对象是一个不需要存储的低成本的通道对象。
发布/订阅 API 没有数据库的概念。所有订阅都是全局的:它们不限于 ISubscriber 实例的生命周期。
redis 中的发布/订阅功能使用命名的 “channels” ;channels 不需要事先在服务器上定义
如在.NET中常见的,订阅采用回调委托的形式,它接受通道名称和消息:
sub.Subscribe("messages", (channel, message) => {
Console.WriteLine((string)message);
});
访问单个服务器
出于维护目的,有时有必要发出服务器特定的命令:
IServer server = redis.GetServer("localhost", 6379);
GetServer 方法将接受一个 EndPoint 或唯一标识服务器的名称/值对。 从 GetServer 返回的对象是成本很低的通道对象,不需要存储,并且可以选择指定异步状态。请注意,可用 endpoints 也可用:
EndPoint[] endpoints = redis.GetEndPoints();
在 IServer 实例中,可以使用 Server 命令。 例如:
DateTime lastSave = server.LastSave();
ClientInfo[] clients = server.ClientList();