持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
1.基本介绍
StackExchange.Redis是一个C# 访问操作Redis的驱动,我们使用它访问Redis时有一个重要的类ConnectionMultiplexer ,它在StackExchange.Redis名称空间中, 这个对象封装了很多基础服务对象的详细信息。
ConnectionMultiplexer 做了很多底层处理,它在调用者之间被设计为共享和重用。我们在使用时不应该为每一个操作都创建一个 ConnectionMultiplexer 对象。
可以使用 ConnectionMultiplexer.Connect 或者 ConnectionMultiplexer.ConnectAsync 并且传递一个配置字符串或者 ConfigurationOptions 对象来完成创建。配置字符串可以被逗号分隔成一系列的节点形式,在本地机器上使用默认端口 6379 来连接到一个实例。
using StackExchange.Redis;
var redis = ConnectionMultiplexer.Connect("192.108.0.106");
ConnectionMultiplexer 实现了 IDisposable 接口,当不需要的时候,可以释放它。没有使用 using 语句。因为它是一个很耗费资源的对象,因此最好是重用该对象。
一个更复杂的场景可能涉及到主从服务的设定。对于这种用法,只需要简单的设定一个连接字符串,该字符串包含主从服务器
var redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");
如果发现两个节点都是主节点(主服务器),能够通过打破平衡(权衡决策)指定那个是主服务器,如果有了一个 ConnectionMultiplexer 对象,那么有3个事情是要做的:
- 访问redis数据库(在集群情况下,一个单一的逻辑数据库可能分布在多个节点当中)
- 使用redis的发布/订阅功能
- 访问一个独立的服务器
2.使用redis数据库
访问redis数据库
IDatabase db = redis.GetDatabase();
GetDatabase 方法返回的对象是一个廉价的直通对象,并不需要存储。注意redis支持多数据库(尽管这不是支持集群);在调用 GetDatabase 时可以任意的指定调用的是那个数据库。还有,如果你计划使用异步API,那你需要为 Task.AsyncState指定一个值,也可以这样指定:
int databaseNumber = ...object asyncState = ...IDatabase db = redis.GetDatabase(databaseNumber, asyncState);
一旦获取到 IDatabase 对象,我们可以简单的调用Redis API。所有的方法都有同步和异步实现。符合命名规范,异步方法全部以 Async结尾,并且全部都是可等待。
例如存储并且取回一个值:
string value = "abcdefg";db.StringSet("mykey", value);...string value = db.StringGet("mykey");Console.WriteLine(value); // writes: "abcdefg"
String前缀表示的是Redis的String类型,它与.Net的Sting类型在很大程度上是不同的。这两者都能存储文本数据。redis允许Key和Value都为原生的字节数据。
string value = "abcdefg";
db.StringSet("mykey", value);
...
string value = db.StringGet("mykey");
Console.WriteLine(value); // writes: "abcdefg"
Redis数据库命令所覆盖的Redis数据类型都是可用的。