视频

了解更多
Redis 是一项很棒的技术,因速度和简单性而受到数百万开发人员的喜爱。Redis 提供了一个直观的原生接口,逻辑上组织成程序员已熟悉的数据结构。此外,这些结构易于使用且经过了极大的优化。正是速度和简单性的终极结合,我们在发布新的 .NET 客户端库 Redis OM 时也以此为目标。
Redis OM 是用于 Redis 的对象映射及更多功能。Redis OM 背后的动机是回答这个问题:“开发人员如何在不学习所有 Redis 命令的情况下,充分利用 Redis 的强大功能?” 在这个第一个预览版中,我们旨在解决“如何在 Redis 中存储和查找我们的领域对象?”这个问题。Redis OM .NET 的预览版是一个对象映射器、一个二级索引构建器以及一个简化且功能强大的查询构建器。所有这些都旨在帮助您使用 Redis 存储和查找您的领域对象。
对 Redis 来说,模块 API 是一个游戏规则的改变者。模块为平台增加了巨大的灵活性,同时为 Redis 提供了一些基本功能。特别是 RedisJSON,它解锁了大量功能,尤其是在二级索引和文档建模方面。虽然 Redis OM 与核心 Redis 配合良好,但当您添加 RedisJSON 时,Redis OM 才能真正发挥其优势,充分利用 RedisJSON 创建一个丰富而强大的 API,用于在 Redis 中对对象进行建模和查询。
Redis OM .NET 的预览版具有四个主要能力
在使用 Redis OM 之前,您需要在项目中安装该包。为此,只需运行 dotnet add package Redis.OM。Redis OM 库中的主要连接逻辑存在于 RedisConnectionProvider 中。此提供者允许您访问三个不同的对象,您可以使用它们与 Redis 进行通信
要在 ASP.NET Core 中将 Redis OM 连接到 Redis,您应该将 RedisConnectionProvider 实例作为单例注入。为此,您将使用一个 Redis URI。如果您使用的是 .NET 6,这意味着打开您的 program.cs 文件并添加
builder.Services.AddSingleton(new RedisConnectionProvider("redis://localhost:6379"));
对于使用 Startup.cs 文件的 .NET 5,您可以将以下内容添加到 Startup.ConfigureServices
services.AddSingleton(new RedisConnectionProvider("redis://localhost:6379"));
RedisJSON 允许您在 Redis 中原生存储 JSON 对象并查询这些对象。但要查询您的 JSON,您首先需要定义索引。为了简化此过程,我们在 Redis OM .NET 中引入了一种声明式模型,允许您通过声明式接口定义这些索引。如果您想声明一个类以便在 Redis 中存储并为其属性创建索引,您可以使用 Document 属性装饰该类,然后使用 Indexed 或 Searchable 属性修饰单个属性。Indexed 表示标准索引,而 Searchable 仅适用于字符串,意味着该属性可以通过全文搜索进行查询。接下来,您可以通过将新修饰的类型传递到 IRedisConnection.CreateIndex 方法中来在 Redis 中创建索引。例如,如果您想声明一个带索引的 Customer 类,您可以执行以下操作
// declare index
[Document(StorageType = StorageType.Json)]
public class Customer
{
[Indexed]
public string FirstName { get; set; }
[Searchable(Aggregatable=true)]
public string LastName { get; set; }
[Searchable(Aggregatable=true)]
public string PersonalStatement { get; set; }
[Indexed(Aggregatable=true)]
public int Age { get; set; }
}
// create index
connection.CreateIndex(typeof(Customer));
创建索引后,您现在可以使用 RedisCollection<T> 在 Redis 中查询对象。因此,如果您在 Redis 中将 John 存储为 Customer 对象,您就可以查询他
var customers = provider.RedisCollection<Customer>();
var john = customers.First(x => x.FirstName == "John");
您还可以轻松进行范围查询。例如,让我们查找所有未达到退休年龄的客户
var customersNotOldEnoughToRetire = customers.Where(x => x.Age < 65);
借助 RedisCollection 和 RedisJSON,您可以像通常在 LINQ 中那样构建丰富而复杂的查询,并且 Redis OM 将为您管理到 Redis 查询语言的转换。
除了查询之外,您还可以使用 Redis Aggregations 构建可以完成各种任务的聚合管道。例如,假设您想计算每个客户在 3 年后的年龄,您可以在 Apply 表达式中执行简单的算术运算来实现,这将在 Redis 中转换为格式正确的聚合管道
var customerAggregations = provider.AggregationSet<Customer>();
customerAggregations.Apply(x =>x.RecordShell.Age + 3,
"AgeInThreeYears");
您还可以将记录分组并计算它们的汇总统计数据。因此,如果您想按客户的姓氏分组,您就可以计算汇总统计数据。例如,以下是计算平均年龄的方法
var averageAgeOfFamilies = customerAggregations.GroupBy(x=> x.RecordShell.LastName).Average(x=>x.RecordShell.Age);
这只是对 Redis OM for .NET 功能的简要概述。如果您想了解更多信息,可以查看教程并浏览 API 文档。我们计划很快向 Redis.OM 添加更多功能,为此,我们非常欢迎社区反馈。请来试用一下。如果您发现问题或想到希望添加到库中的功能,请在 GitHub 中提交 issue。当然,我们始终欢迎社区的贡献,所以 PRs 总是受欢迎的 :)。