StackExchange.Redis官方文档(一)【基本用法】

基本用法

ConnectionMultiplexer 类是StackExchange.Redis的中枢对象,它在StackExchange.Redis名称空间中;
这个对象封装了很多基础服务对象的详细信息。由于 ConnectionMultiplexer 做了很多底层处理,它在调用者之间被设计为共享和重用。你不应该为每一个操作都创建一个 ConnectionMultiplexer 对象。该对象是完全线程安全的。在随后所有的示例中,ConnectionMultiplexer 被假定成一个存储起来且可供重用的对象。
现在,让我们来创建一个。我们可以使用 ConnectionMultiplexer.Connect 或者 ConnectionMultiplexer.ConnectAsync 并且传递一个配置字符串或者 ConfigurationOptions 对象来完成创建。配置字符串可以被逗号分隔成一系列的节点形式,让我们在本地机器上使用默认端口 6379 来连接到一个实例。

using StackExchange.Redis;
...
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
// ^^^ 存储并重用该对象

注意:ConnectionMultiplexer 实现了 IDisposable 接口,当不在需要的时候,我们可以释放它。但是,我故意不显示的使用 using 语句。由于该对象是一个很耗费资源的对象,因此最好是重用该对象。

一个更复杂的场景可能涉及到主/从服务的设定。对于这种用法,只需要简单的设定一个连接字符串,该字符串包含主从服务器。(它能够自动的识别出主服务器)

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

如果发现两个节点都是主节点(主服务器),它能够通过打破平衡(权衡决策)指定那个是主服务器,从而解决这个问题。但是这种情况是非常罕见的。

如果你有了一个 ConnectionMultiplexer 对象,那么有3个事情是你可能想要做的:

  • 访问redis数据库(注意:在集群情况下,一个单一的逻辑数据库可能分布在多个节点当中)
  • 使用redis的发布/订阅功能
  • 以维护和监控为目的,访问一个独立的服务器

使用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都为原生的字节数据。示例如下:

byte[] key = ..., value = ...;
db.StringSet(key, value);
...
byte[] value = db.StringGet(key);

Redis数据库命令所覆盖的Redis数据类型都是可用的。

使用Redis发布/订阅功能

Redis另一个常用的功能是作为发布/订阅消息的分发工具;这也是很简单的,
在连接失败时,ConnectionMultiplexer 将会处理所有的重订阅细节。

ISubscriber sub = redis.GetSubscriber();

GetSubscriber 返回了一个不需要存储的廉价对象。 发布/订阅API没有数据库的概念,但正如之前所提到的,我们可以提供一个异步状态(async-state)。注意:所有的订阅都是全局的。它们不局限于 ISubscriber 的生命周期。发布订阅功能在Redis中叫做通道”channels”;通道不需要预先定义在服务器上(一个令人关注的使用是每个用户的通知通道,例如:Stack Overflow 实时驱动更新部分)。这在.NET中是很常见的,订阅采用匿名函数回调的方式来处理发布消息:

sub.Subscribe("messages", (channel, message) => {
    Console.WriteLine((string)message);
});

你可以单独的发布一个消息到通道中:

sub.Publish("messages", "hello");

这会将”hello”(实时的)发布到订阅了该消息的控制台中。正如前面所提到的,通道名称和消息都可以使用字节类型。

在顺序性和消息并发处理方面,请参考发布/订阅 消息顺序

访问独立的服务器

出于维护为目的,有时候需要发出特定于某个服务器的命令:

IServer server = redis.GetServer("localhost", 6379);

GetServer 方法将会接受一个 EndPoint 对象或服务器端有唯一标识的键值对对象。和之前一样,GetServer 方法返回一个不需要存储的廉价对象。并且异步状态(async-state)是可被选择指定的。注意:可用的终结点的集合也是可用的:

EndPoint[] endpoints = redis.GetEndPoints();

来自 IServer服务器端命令都是可用的;例如:

DateTime lastSave = server.LastSave();
ClientInfo[] clients = server.ClientList();

同步 VS 异步 VS 即发即弃

在StackExchange.Redis中,有3个主要的使用机制:

  • 同步 - 在操作完成之前方法会返回给调用者(注意:尽管这可能会阻塞调用者,但是决不会阻塞其他线程;StackExchange.Redis的关键理念就是它积极共享并发调用方之间的连接)

  • 异步 - 操作将在未来的某个时间完成,并且以 Task 或者 Task\

string value = "abcdefg";
await db.StringSetAsync("mykey", value);
...
string value = await db.StringGetAsync("mykey");
Console.WriteLine(value); // writes: "abcdefg"

在所有的方法中,使用即发即弃访问是通过可选参数 CommandFlags flags (默认是传入该参数)来实现的。这样使用时,方法会立即返回默认值(因此通常返回一个字符串的方法会一直返回 null,而返回一个 Int64 方法会一直返回0)。该操作将会在后台继续执行。一个典型的用例是页面点击率统计:

db.StringIncrement(pageKey, flags: CommandFlags.FireAndForget);
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
### 回答1: StackExchange.Redis 是一个.NET平台下的开源Redis客户端库,它提供了一种高性能、稳定和易于使用的方式来与Redis服务器进行通信。它支持异步和同步操作,并提供了一些高级特性,如管道、发布/订阅等。 StackExchange.Redis 具有以下特点: - 快速:通过使用高性能、低级别的Redis通信协议,StackExchange.Redis 可以实现高效的数据访问。 - 可扩展性:StackExchange.Redis 支持分区功能,使它能够在多个Redis节点上分布数据,并且可以在需要时轻松地添加或删除节点。 - 可靠性:StackExchange.Redis 有一个内置的连接池来管理与Redis服务器的连接,从而可以提高性能和可靠性,并避免了频繁的连接/断开开销。 - 易用性:StackExchange.Redis 提供了一个简单的API,使得开发人员能够轻松地与Redis进行交互。 总的来说,如果你在.NET平台上使用RedisStackExchange.Redis 应该是你的首选。 ### 回答2: StackExchange.Redis 是一个基于Redis的 .Net客户端库,由StackExchange团队开发和维护。Redis内存数据库是非常流行的键值对存储,支持复杂数据结构,速度快,有完善的集群方案,在web应用程序、消息系统等应用场景中被广泛使用。 StackExchange.Redis提供了方便易用、高性能、可扩展的API,可以直接向Redis发送命令、订阅和发布消息、连接Redis集群等。他进一步扩展了Redis命令,使其更加简单易用,并支持事务、管道和多线程操作。同时,StackExchange.Redis支持Redis的高级特性,如SortedSet和Hash;而且,它还能够在运行时自动检测Redis服务状态,支持Redis Sentinel、Cluster和多节点环境。 此外,StackExchange.Redis还支持应用程序跟踪(application tracing),采用异步API调用,从而提高了性能和可伸缩性。与其他Redis客户端库不同,StackExchange.Redis实现了连接池、序列化和反序列化器等高级功能,使用起来更加方便和优雅,可以减少代码量和复杂性。 总的来说,StackExchange.Redis是一个很不错的Redis客户端库,它提供了强大而与Redis完全兼容的API,打破了语言壁垒,使得开发者可以在自己喜欢的语言环境(例如.Net)中使用 Redis 。 许多一流的公司如 StackOverflow和GitHub都使用 StackExchange.Redis,证明了它的可靠性和性能优势。 ### 回答3: StackExchange.RedisRedis数据库的一个适用于 .NET 编程语言的客户端。它提供了一组丰富的功能,用于在 .NET 框架内与Redis数据库进行交互。 StackExchange.Redis旨在为 .NET 开发人员提供最佳的Redis集成体验。StackExchange.Redis提供了许多优点,其中最主要的有: 高度优化的读写操作。StackExchange.Redis客户端库具有非常高的效率,用于从Redis服务器读取和写入数据时,可大大减少网络流量和延迟。这使得它成为处理高吞吐量负载的很好的选择。 支持许多复杂数据类型。除了提供基本的字符串和整数类型之外,StackExchange.Redis还支持许多复杂的数据类型,例如哈希表、排序集合和列表数据类型。这些数据类型将极大地帮助开发人员设计和实施高效的Redis应用程序。 易于使用和集成。StackExchange.Redis具有完美的适配性,可以很简单地与 .NET 中的 ASP.NET 应用程序、Windows 服务、控制台应用程序等相集成。此外,它具有丰富的文档、教程和API reference,可以让开发者轻松入手。 另外,StackExchange.Redis还包括许多其他特性,如:连接复用、事务支持、发布与订阅、管道等。这使得它成为在 .NET 编程语言中使用Redis数据库的非常好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值