缩放 ASP.NET Core 应用程序 NCache

录制的网络研讨会
作者:罗恩·侯赛因和扎克·汗

ASP.NET 是一种非常流行的用于开发 Web 应用程序的技术。 现在它的最新版本 ASP.NET Core 在急于将其 Web 应用程序迁移到 ASP 的组织中迅速普及.NET Core. 但是,ASP.NET Core 当处于繁重的用户负载下时会遇到可伸缩性和性能问题。 发生这种情况是因为您的数据存储成为瓶颈。 但是,如果您使用分布式缓存,则有一种方法可以解决此性能和可伸缩性瓶颈。 了解如何优化 ASP.NET Core 在极端事务负载下执行的性能和可扩展性。

以下是本次网络研讨会的内容:

  • ASP 概述.NET Core 可扩展性和性能瓶颈
  • 分布式缓存如何解决这些问题
  • 通过 ASP 缓存应用数据.NET Core IDistributedCache 接口和 Direct NCache APIs
  • ASP.NET Core 会话存储与 NCache
  • ASP.NET Core 响应缓存 NCache
  • 一些重要的 NCache 分布式缓存功能

在今天的网络研讨会中,我们将概述 ASP.NET Core 可扩展性和性能瓶颈以及分布式缓存如何解决这些瓶颈和其他问题。 我们将讨论 ASP.NET Core 应用程序,它们的性能和可扩展性瓶颈是什么,然后我们将讨论如何借助 NCache 分布式缓存系统。

NCache 是一个内存分布式缓存系统,适用于您的 .NET 和 .NET Core 应用程序。 它是用 .NET 编写的,主要用于 .NET 和 .NET Core 应用程序,但今天主要关注的是 ASP.NET Core web 应用程序,我有一些可用的示例功能。 我也列出了一些示例应用程序。 因此,这将是一个动手实践的网络研讨会,我将在其中分享您可以捕获的不同用例的一些特性级别的详细信息,以及有助于解决这些用例的特性,我还将演示这些示例。 让我们开始吧。

所以,我们的前几张幻灯片是关于 ASP 的介绍性幻灯片.NET Core 平台一般。 我很确定每个人都知道什么是 ASP.NET Core 是。 它是新的 ASP Web 应用程序平台。 它干净轻巧,模块化。 就 Web 应用程序方法而言,它主要是 MVC 架构。 你知道,流行的前端 Angular,React 它主要是基于 JavaScript 的前端,然后是 MVC 架构来支持它。 它是跨平台的。 您可以在 Windows、Linux 和任何其他操作系统(例如 macOS)上运行它。 而且,通常它也与旧版 4.0 ASP.NET 应用程序非常兼容。

ASP.NET Core (在高流量应用中很受欢迎)

如果您有一个 ASP.NET MVC 应用程序,现在您可以从该应用程序迁移,然后开始使用 ASP.NET Core 总的来说,这种技术非常快速、非常健壮、非常轻量级和干净的架构。

什么是可扩展性?

首先我们要讨论 ASP.NET Core 平台是否需要可扩展性。 那么,让我们定义什么是可扩展性? 任何在正常用户负载下运行的应用程序和规范化我的意思是一些用户在那里。 假设有 5 到 10 个用户登录,他们正在执行某些事务、某些操作、读取和写入请求。 这里的典型想法是,您的应用程序在低用户负载下会超快。 但是,一旦您的应用程序负载增加,这也是业务的要求,您需要让越来越多的用户登录到您的应用程序。 那时您的应用程序往往会变慢。 在峰值负载下可能会出现缓慢的性能。

如果您的应用程序在用户数量较少的情况下无法保持相同的性能,而在用户数量较多的情况下,如果它能够保持相同的性能,那么该应用程序将被归类为非常可扩展的应用程序。 该架构具有向外扩展的能力,并能够处理来自最终用户的增加的负载。 因此,峰值负载下的高性能实际上定义了可扩展性因素。

这是一个图表。 通常在 ASP.NET 和 ASP 中实现可伸缩性.NET Core 通过多个 Web 或应用服务器的平台。

线性可伸缩性

您可以分配应用程序负载。 您只需将应用程序部署在多个 Web 或应用程序服务器上,并在此基础上将应用程序用户负载分配到这些服务器上,当您添加更多服务器时,您会在请求处理能力方面获得线性改进。 更多服务器意味着您的应用程序具有更多的请求处理能力。

这是一种非线性可扩展性,即使在添加更多服务器之后,架构的设计方式也不是这样:尽管您添加了很多 Web 服务器或应用程序服务器,但您的应用程序并没有横向扩展,因为您的用户负载是生长。

非线性可扩展性

因此,您的事务需求正在增长并且您正在添加服务器,您正在执行所有正确的步骤,但您仍然无法获得满足增加的请求负载所需的容量。 所以,这个问题通常与后端数据源有关,我将讨论它。

所以,首先让我们看看哪些应用程序需要可扩展性。 有哪些不同类型的应用程序? 在 ASP.NET & .NET Core 我们有 Web 应用程序和 MVC Web 应用程序,运行主要业务、一些 Web 服务、一些服务调用、一些微服务,这是新架构,它可以是任何其他通用 .NET 或 .NET Core 应用。

所有这些都需要可扩展性,因为您可能有很多内部或外部用户或发生请求负载,这需要您的应用程序架构来实现。

可扩展性问题

我提到您可以创建一个 Web 场。 您可以将应用程序负载分布在多个服务器上。 那么,可扩展性问题到底出在哪里? 如您所见,如果添加服务器,您应该能够处理越来越多的请求负载,因为就应用程序场或 Web 场而言,它为您提供了线性可伸缩性。

但是,您究竟什么时候开始看到非线性可扩展性或根本没有可扩展性? 这通常是关系数据库。 您的应用程序层可以很好地扩展,对吧。 您可以添加更多服务器。 您可以在同一个盒子上创建同一应用程序的多个实例,也可以让单独的盒子托管您的应用程序。 但是所有这些应用程序通常都与后端关系数据库通信,关系数据库非常适合存储,但是当涉及处理极端数量的请求负载时,例如,您的应用程序上发生了大量事务负载,该数据库变得一个瓶颈。 它首先会减慢速度,因此,它是一个性能瓶颈,然后它没有能力增加它的可扩展性。 它没有任何增加容量的能力。 它只会为您提供托管数据库的给定服务器的容量。

它也可能是一些大型机数据库。 它可能是一些文件系统。 所有这些来源都是您的应用程序的可扩展性瓶颈,这就是您的应用程序速度变慢的地方。 您的请求开始排队,整体最终用户体验会受到影响。 NoSQL 不是答案。 你知道,我明白很多 NoSQL 产品在那里。 我们还有一个产品叫 NosDB,这是一个 NoSQL database. 但主要问题是 NoSQL databases 是您的应用程序需要重新架构,您停止使用关系数据库并开始使用 NoSQL 比较的非结构化数据源。

因此,应用程序的重新架构也并不容易,对吧。 所以,这是你需要解决的另一个问题。 因此,总体而言,您的应用程序不可扩展,主要是因为后端数据源。

解决方案: NCache 分布式缓存

解决办法是什么? 这很简单,您开始使用分布式缓存系统,例如 NCache. 它在内存中,因此与数据库相比,它的速度非常快。 因此,这是您从中获得的第一个好处。 因此,与基于磁盘的访问相比,使用内存访问 NCache 相比之下超级快。 因此,第一个好处是,您的常规应用程序请求将 NCache 与数据库相比,它将是超快的,并且通过节省对后端数据源的访问,它还将减轻数据库的负载。 因此,您的数据库也可以自由地做其他事情。 它的第二个好处是,它非常可扩展。 它的模型是线性可扩展的。 它不仅仅是一个服务器。 您可以使用多台服务器来托管缓存集群。 这是一个缓存集群。 因此,服务器团队相互结合,帮助满足您的客户请求。 更多的服务器意味着更多的请求处理能力 NCache 这就是它给你带来巨大好处的地方,你不仅可以获得超快速的响应 NCache,它超快、低延迟,还为您提供高吞吐量、极高的可扩展性。 您可以继续添加更多服务器,并且可以在用户负载增加时线性增加容量,而无需更改应用程序架构中的任何内容。

而且,关于 NCache 除了后端数据库之外,您还使用它。 它不能替代您的传统关系数据源。 我们不必重新构建应用程序即可开始使用 NCache. 您可以随时使用 NCache 与后端数据源相结合,您的部分或大部分数据都在其中 NCache 并且数据库有它的主副本。 但是,对于某些用例,缓存将包含所有数据。 例如,对于会话和其他用例。

NCache 可扩展性数字

这是我们的吞吐量数字。 我们在 AWS 实验室中进行了这些测试。 这是在我们的 AWS 实验室中模拟的真实应用程序数据。 因此,这不是一触即发的数据。 在我们的环境中模拟了实际的应用程序数据。 我们在哪里使用 5 NCache 服务器,我们能够实现每秒 2 万个请求 NCache.

因此,如果您或您拥有可伸缩性数字,如果您添加了越来越多的服务器,这就是您所拥有的性能改进。 所以,每秒 2 万个请求,只有 5 个 NCache 服务器,这是一个非常线性增长的趋势,如果您继续添加更多服务器,它应该会继续增加。

这些也发布在我们的网站上。 有个 视频演示 也可用。

部署架构

这是我们的部署架构。 通常,这是如何 NCache 部署分布式缓存系统。 它在本地和云中的所有环境中均受支持。 你可以,你只需要 .NET 或 NET Core Framework 可用。 这是唯一的先决条件 NCache 您可以将它部署在 Windows 以及 Linux 服务器上。 它可以是您本地的物理或虚拟盒子,也可以是任何公共或私有云,您拥有 .NET 或 .NET Core 安装在 Windows 或 Linux 上。 所以,这是两个要求。

除此之外 NCache 每个平台都支持。 它可以在 Azure Marketplace,以及,AWS 和我们也在提出基于 SaaS 的模型或部署 NCache 在我们即将推出的版本中。

有两种部署选项。 一种是您应该使用专用服务器进行缓存,并且您的应用程序以客户端服务器模型连接。 这也是云中的首选模型,您没有客户端虚拟机,但有服务器端部署。

并且,第二个部署选项是您使用现有的应用程序框作为您的 NCache 服务器也是如此。 这主要是在您已经拥有应用程序层的内部部署中。 较小的配置,您可能想要使用 NCache 安装在同一个盒子,同一组服务器上。

无论哪种方式 NCache 处理您的大部分流量。 建议 100%,并且一些流量总是可以进入后端数据库,这可能是您的事务性操作读取、写入操作,您可以通过缓存处理后端数据源。

因此,您可以将缓存用作站点模式,其中您的应用程序具有数据并更新数据,或者从缓存和数据库中获取数据,或者您可以使用通读和通写方法,该方法也可用于 NCache.

分布式缓存的常见用途

我将讨论一些用例,然后我们将直接进入我们的 ASP.NET Core 特定缓存 特征。 那么,让我们来谈谈一些常见的用例 NCache. 有很多用例。 而且,从技术角度来看,我列出了一些,这些是特定于 ASP 的.NET Core 应用程序,但通常适用于任何 .NET 或 ASP.NET 或 ASP.NET Core or .NET Core. 它可以是 Web 应用程序、一些后端应用程序、一些工作流、一些 Windows 服务,任何应用程序都可以使用 NCache 并且有许多用例可供您选择。

  1. 应用数据缓存

    主要用于 ASP.NET Core,我们将以应用数据缓存为目标,在此我们有两个选项。 您可以使用 IDistributedCache 接口. 如果您已经在应用程序中使用 IDistributedCache,您可以简单地插入 NCache 作为提供者。 所以,这是第一个选择。 第二种选择是,您使用直接 NCache API 和应用程序数据缓存中几乎可以缓存应用程序中的任何内容。 它可能是您的域对象、集合、数据集、任何您想多次使用并且您不想转到后端数据库的数据,您已经检索了该数据,现在您可以将该数据保存在缓存,您可以继续使用缓存存储库并保存到数据库的行程。

  2. ASP.NET Core 会话缓存和 SignalR Backplane

    第二个用例是 ASP.NET Core 特定的缓存。 这些是我们的 Web 前端缓存功能。 在这方面,我们有很多特点。 你可以使用 ASP.NET Core 会话状态。 您知道,这是一个单站点和多站点会话。 NCache 是一个分布式缓存集群。 因此,您的会话以分布式方式存储在内部 NCache. 它也是一个无代码更改选项,几乎只需在您插入的扩展方法中更改一行代码 NCache. 为了使用它,不需要大量的代码更改,而且这些在内部非常可靠 NCache 因为会话是跨服务器复制的。 因此,任何服务器出现故障,都不会导致任何数据丢失或应用程序停机。

    这里的第二个特点是 ASP.NET Core 响应缓存. 如果你有静态页面。 从历史上看,在 ASP.NET 中,我们有输出缓存。 在较新的 ASP.NET Core 平台,您可以使用响应缓存,您可以在其中定义页面级标题,并基于这些页面将所有页面输出缓存在里面 NCache. 因此,响应被缓存。 如果您再次发出完全相同的请求,您将获得可用的预缓存响应。 所以,这是其中的一个功能 NCache,这也是您可以在 ASP 上使用的无代码更改选项.NET Core 前端缓存级别。

    然后,如果您使用 SignalR 并且您有一个网络场,那么您需要一个背板。 所以, SignalR Backplane 如果您从单台服务器转到 Web 场部署,并且在这种情况下,则需要 NCache 可以充当 ASP.NET Core 背板, SignalR Backplane 为您的 SignalR 应用程序。 它在幕后使用 Pub/Sub 消息传递,这是事件驱动的。 非常快,非常可扩展。 因此,如果您使用插件,您将获得高性能和可扩展性以及高可用性和可靠性的好处 NCache 作为ASP.NET Core SignalR Backplane.

  3. 发布/订阅消息

    最后,第三个用例是 Pub/Sub 消息传递。 发布/订阅消息 也是一个单独的用例。 对于 SignalR,我们在幕后使用的是 Pub/Sub 消息传递。 但是 Pub/Sub Messaging 可以用作一个单独的用例 NCache 也是。 对于微服务应用程序,这很有意义,您可以在微服务架构下定义简单的应用程序。 这些人负责一项专门的任务。 他们服务的一个非常重要的目的。 因此,很难安排这些微服务之间的通信和 NCache 可以解决这个问题。 您不必自己在微服务应用程序中实现任何通信。 你可以依靠 NCache 为此的通信平台以及与之连接的任何应用程序都可以发送和接收消息,并且在执行此操作时不必降低任何性能。

    您可以拥有发布者订阅者模型。 发布者将数据发布到缓存,然后缓存将这些消息存储并转发给所有订阅者。 这是一个异步事件驱动的机制。 因此,发布者和订阅者甚至不必相互认识。 因此,没有延迟,不涉及等待,不涉及同步调用。 所以,它是非常健壮、非常快速、松耦合的架构,一切都由 NCache,就本平台而言。

动手演示

因此,我们已经介绍了这些高级功能。 接下来,我将向您展示实际的产品。 我将在其中创建一个缓存集群。 测试一下。 向您展示一些监控方面,然后我们将讨论您可以在 ASP 中使用的所有这些功能.NET Core 逐个。 因此,我为此准备了一些示例应用程序。 所以,我正在登录我的演示环境。

所以,这里我们有两个 NCache 我将使用的服务器和我的盒子将充当客户端机器,我将在其中运行所有这些示例应用程序。 所以,这里的想法是我将使用 基于网络的管理工具和监控工具.

因此,这个基于 Web 的管理工具允许您从一个点管理和监控所有内容。 它可以是任何 Web 请求,来自任何地方的 http 请求,从您的环境到您的一个 NCache 服务器或客户端,它应该允许您通过 Web 远程管理和监控所有内容。

创建集群缓存

因此,localhost,您可以提供一个 IP 地址,然后您就可以通过 Internet 从任何地方访问该资源。 所以,我将继续创建一个新的缓存。 比方说,'aspcorecache'。 所有缓存都需要命名。 您也可以创建多个缓存集群,并且可以根据需要提出任何有意义的缓存名称。

序列化模式可以是二进制或 JSON。 所以,我将坚持二进制,坚持二进制,然后 JSON 也非常灵活,所以,如果你想使用它,然后我会选择副本缓存拓扑的分区。

内 NCache 有许多 缓存拓扑. 如果我快点带你走向终点。 因此,我们有许多缓存拓扑可供选择。 我们已经分区,然后我们使用备份进行分区。 因此,在此我们让每台服务器维护两个分区。 连接客户端的活动数据分区和另一台服务器的被动副本分区。 如您所见,服务 XNUMX 处于活动状态,其备份位于 XNUMX 上,而服务器 XNUMX 处于活动状态,其备份位于服务器 XNUMX 上。 万一任何服务器出现故障,备份将被激活,您可以从这里获取所有数据。 在正常操作下,这些分区具有相等的数据分布。

客户端连接到所有服务器,因此读取和写入请求非常快,如果添加更多服务器,您将获得更多读取和写入请求处理能力,因为所有这些服务器相互结合工作。 所以,这就是我选择副本分区的拓扑。

然后是异步复制选项。 在活动和备份之间,您可以选择同步或异步。 同步更可靠。 异步更快。 所以,我将继续这样做。

尺寸 1024 对这个演示来说已经足够了,但是你可以想出任何对你有意义的尺寸。

TCP 参数。

问题: 我们目前正在使用 NCache,有没有办法避免 client.ncc 或 nc conf 文件或您在开发管道中拥有的东西?

是的。 这是绝对可能的。 client.ncconf 允许您指定配置以连接到运行缓存集群的缓存服务器,对吧。 就我而言,我有两个框和一个缓存名称。 因此,client.ncconf 具有缓存名称和配置此缓存的服务器。 如果你想避免 client.ncconf,你可以内联提供所有这些设置。 我们有缓存初始化参数。 我们称它们为缓存初始化参数。 这些就是允许您在应用程序代码中指定所有这些配置的对象。 所以,是的。 要回答这个问题,您需要使用缓存初始化参数。

问题: 我们可以部署吗 NCache 在 Azure 中?

绝对地。 当我们分享有关部署架构的详细信息时,我讨论了这个问题。 NCache 在 Microsoft Azure 和 AWS 以及任何其他公共或私有云中得到完全支持。 只有先决条件 NCache 是 .NET 或 .NET Core,取决于您选择的操作系统。 我们还在 Azure 和 AWS 中提出了我们的 SaaS 模型。 所以,完全支持。 我们的市场图片也已发布。 所以,有很多方法可以使用 NCache 在天蓝色.

NCache 是一个基于 TCP/IP 的缓存集群协议。 因此,它需要一个 IP 地址和一个端口。 所以,我只会在屏幕上保持默认设置。

如果我的缓存已满,我有两个选择,我可以拒绝新的更新并继续使用缓存进行读取,或者我可以打开驱逐,它会自动删除一些数据以为新项目腾出空间。

对于会话、视图状态、响应缓存甚至对象缓存,如果数据具有重要性质,我强烈建议您关闭驱逐并提供足够大的气体大小,以使其永远不会变满,即使它变满了您可以在运行时更改缓存大小。 但是,如果可以负担得起,那么实际上丢失一些数据是可以的,如果您负担得起,那么,在这种情况下,您可以启用驱逐,并且在缓存变满时,它会自动删除一些数据并为新数据腾出空间。 所以,这就是驱逐的作用。

在完成时启动此缓存并在服务启动时自动启动此缓存。 因此,每次我的服务器重新启动时,缓存都会自动启动,仅此而已。 配置两节点缓存集群就是这么简单 NCache.

模拟压力并监控缓存统计信息

因此,我们的缓存已启动并正在运行。 它也被激活了,所以,我将快速进行测试。 统计窗口。 因此,这些向我展示了 perfmon 计数器两个服务器,然后监视方面 NCache.

很好。 因此,它也为我提供了服务器端和客户端仪表板报告视图。 所以,所有的参数都在那里。

接下来是测试这个缓存。 没有应用程序连接,所以,我将继续这样做。 那是缓存的名称,在幕后这是使用客户端配置连接并将连接到我的缓存集群并开始模拟请求。 如您所见,每秒请求数计数器和每个缓存操作的平均微秒数计数器显示活动。 我们还发生了添加、获取、更新,并且显示了缓存大小计数器、CPU、内存,并且我们有当前连接到缓存的客户端 IP。

让我继续运行这个工具的另一个实例。

问题: 另一个问题,当你这样做的时候,我们可以监控所有连接到我们缓存的客户端吗?

绝对地。 这是内部非常强大的功能之一 NCache. 我可以在这个例子的帮助下展示这一点。 现在我们已经连接了两个客户端。 首先,我可以看到客户端仪表板。 所以,这两个客户端是从 107 运行的,我可以看到从这个客户端框进行读取操作。 如果我正在从我的盒子运行应用程序,你也会在这里看到我的盒子统计信息,同样我们也可以看到从这里发送和接收的进程、它们的进程 ID、端口、字节。 但是,我认为您正在寻找的主要内容是来自客户端的不同监控方面。 所以,我们有每秒读取操作、每秒添加、每秒更新、获取。

因此,我们有一套完整的客户端计数器,可作为 NCache,对,缓存运行状况,这些都是服务器端计数器,但所有这些计数器,您在客户端下显示的这些都可以添加,您也可以为您的客户端应用程序服务器查看所有这些计数器。

所以, NCache 对客户端监控的支持非常广泛。 我希望这能回答你的问题。

现在,我实际上已经运行了我能够运行两个压力测试工具实例,您可以看到每个实例每秒大约 800 到 900 个请求 NCache 服务器。 因此,平均每秒处理大约 1500 个请求。

所以,这是一个快速演示。 我要停止使用这些工具。 接下来,我将向您展示您可以实际使用的实际功能。 所以,我们花了很多时间来解释如何 NCache 是非常可扩展的。? 它是如何部署的? 如何配置和创建缓存集群?

现在,我想强调的下一件事是如何利用 NCache 在 ASP.NET Core 应用程序以及主要用例是什么。 我们涵盖了不同的用例。 所以,我将开始使用 ASP 中的 Web 前端缓存用例.NET Core.

NCache ASP.NET Core 会话缓存

所以,我要强调的第一个功能是 NCache ASP.NET Core 会话缓存。 我们在这里有两个选择。 如果您已经在使用会话,并且大多数情况下您将使用 IDistributedCache 接口,则可以使用。 所以,你可以插入 NCache 作为通过 IDistributedCache 进行会话缓存的提供者。 您有独立的内存提供程序。 您有一个 SQL 服务器提供程序。 独立是单点故障。 它不可扩展。 SQL 服务器在某些情况下也是单点故障。 它不可扩展,而且速度非常慢。

NCache 供应商超级快。 它在内存中。 它非常可扩展。 这不是单点故障,您可以在运行时增加容量。 因此,您可以添加越来越多的服务器,并且您可以知道实现无限的可扩展性 NCache. 所以,IDistributedCache,让我们快速回顾一下。 所以,这是我们的猜谜游戏,IDistributedCache。

public void ConfigureServices(IServiceCollection services)
{
	//Add framework services
	services.AddMvc();

	services.AddNCacheDistributedCache(configuration =>
        {
	   configuration.CacheName = "MyNCacheCache";
	   configuration.EnableLogs = true;
	   configuration.ExceptionsEnabled = true;
        });
}

public void Configure(IApplicationBuilder app)
{
	app.UseNCacheSession();
}

您需要做的就是,添加服务点 NCache 分布式缓存然后说app使用 NCache Session 和这里是一个示例应用程序,它将执行此操作。

public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            //To test sessions with NCache Distributed Cache, uncomment the following lines and comment the line after it
            services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
			services.AddSession();			
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

这里的第二个选项是 NCache 具有高级功能的会话提供程序,我也有一个示例应用程序。 所以,让我们真正关注这一点。 首先,因为与 IDistributedCache 相比,我们的提供程序功能更加丰富,所以,我想强调这一点,作为其中的一部分,您将看到 IDistributedCache 提供程序还为您提供的所有功能。

所以,回到这里。 首先,你需要 NCache NuGet 包,我已经在其中添加了它。 所以,如果我们有 AspNetCore.Sessions。NCache, 对。 所以,这就是 NuGet 包,让我快速回到这里并在这里回顾会议,这有 NCache.Microsoft.Extensions.Caching. 因此,IDistributedCache 会话 NuGet 包与 NCache 实际的会话提供者。

所以,我将在这里重点关注这一点。 您需要做的就是…… 首先来Startup.cs。 您有服务。添加NCache会话,它需要 NCache 配置中的设置。

... 
    public IConfigurationRoot Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc();
        
        //To test sessions with NCache Distributed Cache, uncomment the following lines and comment the line after it
        //services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
		//services.AddSession();
			
        services.AddNCacheSession(Configuration.GetSection("NCacheSettings"));
    }
    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
... 

并且,在配置中,您指定所有 NCache 提供者设置。 例如,我正在使用 ASP.NET Core 缓存。 SessionAppId 是应用程序 ID 属性,应用程序会附加缓存项键。 您的会话 id 成为缓存键,并且此属性将附加到它。 因此,您可以唯一地查看内部不同应用程序的会话 NCache 然后你设置了一些会话锁定。 你可以,如果你把它设置为true。 好吧,所以,如果你将它设置为 true,那将允许你简单地锁定会话,这样就不允许并发访问。

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "NCacheSettings": {
    "CacheName": "mycache", //Replace "myPartitionedCache" with the name of your cache
    "SessionAppId": "GuessGame", //(Optional)Specifies an identifier to make sure that session ID remains unique in case multiple applications are using the same cache.
    "EnableSessionLocking": false, //(Optional)If this flag is set, NCache Session Store Provider exclusively locks the session-store item for which multiple concurrent requests are made. The default is false.
    "SessionLockingRetry": -1, //(Optional)If enableSessionLocking is true and this integer is not less than 0, NCache Session Store Provider will return empty session after sessionLockingRetry, which specify the number of retries to acquire a lock. The default is -1.
    "EnableLogs": false, //(Optional)When this flag is set, store provider logs all error information. The log files are created in %NCHOME%/log-files/SessionStoreProvider. The default is false.
    "EnableDetailLogs": false, //(Optional)When this flag is set, store provider logs all debugging information. The log files are created in %NCHOME%/log-files/SessionStoreProvider. The default is false.
    "ExceptionsEnabled": false, //(Optional)Specifies whether exceptions from cache API are propagated to the page output. Setting this flag is especially helpful during development phase of application since exceptions provide more information about the specific causes of failure. The default is false.
    "OperationRetry": 0, //It specifies the number of times server will retry the operation, in case connection is lost with a server while an operation is executing. Its default is zero.
    "operationRetryInterval": 0 //It specifies the time interval between each operation retry, in case connection is lost with the server. Its default value is zero.
  }
}

因此,您只能阅读会话。 写访问权只授予具有日志的当前请求,然后我们有详细的日志可用。 提供单站点和多站点会话。 因此,所有这些功能只有在您插入我们的 ASP 时才可用.NET Core 会话提供者。 支持 IDistributeCache 会话,但这些会话是有限的。 所以,我将真正快速地运行它,它会模拟一个最终连接到这个 ASP 的应用程序.NET Core 缓存。

其实,让我停下来吧。 让我先将我的盒子添加为客户。 所以,在这里我需要做的就是添加客户端盒子,这是我的盒子。

你去吧。 我现在拥有所有配置,现在我可以再次运行这个应用程序,并且应该允许它连接到我的缓存集群。 很好。 因此,第一次实例化需要一些时间。

所以,这会在里面创建一个会话对象 NCache. 我会看到,如果我进入监控方面,我会看到一个客户端连接。 一旦提供者被初始化,客户端将连接到 107 和 108 并在其中创建会话对象 NCache. 目前只会创建一个会话对象,因为那是主要用户。 我将成为登录的一个用户,但如果您有多个应用程序用户,您会看到内部创建了多个会话 NCache. 但是,这里的想法是,您需要做的就是添加这两行代码非常简单。 添加 NCache 会话,然后说使用 NCache 会议。

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();

//To test sessions with NCache Distributed Cache, uncomment the following lines and comment the line after it
//services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
//services.AddSession();
			
services.AddNCacheSession(Configuration.GetSection("NCacheSettings"));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();
    //To test NCache Distributed Cache, uncomment this and comment the line below this
    //app.UseSession();
    app.UseNCacheSession();
... 

这些扩展方法将涵盖所有内容。 第一次实例化需要稍长的时间,这就是我们在 ASP 中看到的.NET Core 但是一旦完成,应用程序就可以启动并运行,我们应该能够真正快速地对其进行测试。 你去吧。 一个客户端已经连接,所以,我想我们在那里。

在此期间,让我运行一个快速命令,即导出。 该工具会转储当前存在的所有缓存键。

所以,我期待在缓存中添加一个会话对象,因为一个客户端已连接,这应该允许我有两个会话。 上一次尝试中的一个和本次尝试中的一个,已经在那里。 你去吧。

这是一个猜谜游戏,可让您猜一个数字,并将这些数字添加到会话中,并显示这些数字。 所以,让我猜一个更大的数字,这就是它提出请求的方式 NCache.

所以,这是一个非常简单的应用程序,但是如果你回到这里,我们在缓存中有两个项目,你一定已经看到了我刚刚发出的那两个请求 NCache 服务器端。

至此,我们的第一个演示就完成了,您可以使用插件 NCache 用于会话缓存。 有很多特点。 支持单站点、多站点会话。 支持会话锁定。 广泛的日志记录可用。 这是非常安全的。 我们在它上面有安全和加密。 所以,它是一个完整的包,如果你打算使用 NCache 用于会话缓存。

ASP.NET Core 响应缓存

这里的第二个功能是 ASP.NET Core 响应缓存。 在此,我们在应用程序上有 http 标头。 您可以选择缓存页面输出并使用 NCache 用于缓存的响应缓存中间件,它再次通过 IDistributedCache 接口。 所以,如果我回到这里,我们有这个 样品申请.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Alachisoft.NCache.Caching.Distributed;

namespace ResponseCaching
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            #region Option1
            // Reading NCacheSettings using appsettings.json

所以,为了使用它,你需要做的就是使用这个 NuGet 包 NCache.Microsoft.Extensions.Caching. 这将涵盖会话、用于对象缓存的 IDistributedCache 和一个 NuGet 包中的响应缓存。

而且,接下来你需要做的是 服务。添加NCache分布式缓存.

// This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            #region Option1
            // Reading NCacheSettings using appsettings.json
            services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
            #endregion

            #region Option2
            // Reading NCacheSettings using hardcoded values
            //services.AddNCacheDistributedCache(options =>
            //{
            //    options.CacheName = "myPartitionedCache";
            //    options.EnableLogs = true;
            //    options.ExceptionsEnabled = true;
            //});
            #endregion

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

所以,这是一个插入的 IDistributedCache 接口,但我们将使用它来进行响应缓存,在应用程序设置中,我们有缓存名称和我们设置的一些日志记录设置,如果我回到这里,你就会有响应缓存也配置了 services.AddResponseCaching();

...
namespace ResponseCaching
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
...

所以这个应用程序期望完成响应缓存。 这将通过 NCache 使用 IDistributedCache 接口。 所以,我要跑得很快,因为它需要一些时间,然后期望它能够真正连接到 NCache 然后我们将实际向您展示正在添加的数据。

如果我给你看代码。 你知道,你也可以内联指定配置。 例如,“添加NCacheDistributedCache',你可以说缓存名称'demoClusteredCache'或'aspCoreCache',你可以指定所有的设置内联

public void ConfigureServices(IServiceCollection services)
{
...
   services.AddNCacheDistributedCache(configuration => 
   {
	configuration.CacheName = "demoClusteredCache";
	configuration.EnableLogs = true;
        configuration.ExceptionsEnabled = true;
   });
...
}

或者你可以只使用 NCache 设置并通过 NCache 设置,就在这里。 它可以通过配置或通过内联设置。 所以,在这方面非常简单。

public void ConfigureServices(IServiceCollection services)
{
   services.AddResponseCaching();

   //remaining services here
   ...
   //Add NCache services to the container
   services.SetNCacheSessionConfiguration ( 
	Configuration.GetSection("NCacheSettings"));

   services.AddNCacheDistributedCache();

   services.AddMvc();
}

如果我现在回到这里,我们希望连接两个客户端,因为响应缓存应用程序也会连接到 NCache 因此,我们会在缓存中看到一些项目。

问题: 数据究竟是如何加密并保持安全的?

让我展示这个响应缓存示例,然后我将展示里面的安全加密功能 NCache. 因此,我们运行了应用程序,如您所见,我们添加了一些项目。 如果我只是刷新这个我们有从这里更新的值,这个页面输出内容存储在里面 NCache 通过我们的响应缓存,如果我向您展示缓存键,我们现在在缓存中有更多项目。 因此,除了已经存在的会话项目之外,还有两个项目。

现在,回到 安全加密. 里面非常广泛 NCache. 我们有安全和加密功能。 有许多安全提供商可供您选择。 我们有 AES 和 DES 提供商。 其中的多个。 我们有符合 FIPS 的加密提供程序,我们也支持 TLS 1.2。 因此,传输级别的安全性也可用于 NCache. 所以,这就是你的加密。 您可以在客户端和服务器盒之间进行端到端加密,然后从安全角度来看,您可以选择谁可以是缓存管理员,谁可以是缓存用户,我们有基于活动目录的基于 LDAP 的加密安全提供商可以插入。

因此,如果有任何具体问题,您可以给我们发送电子邮件,我们将与您合作并分享有关如何配置这些的所有详细信息。 但是我们内部有非常广泛的支持 NCache. 所以,回到这里。 所以,这涵盖了我们的 ASP.NET Core 响应缓存。

ASP.NET Core SignalR Backplane

下一个特性是 ASP.NET Core SignalR Backplane. 在此,如果您使用的是网络农场,您可以使用 NCache 作为它的背板,与传统背板相比, NCache 速度更快,非常可靠且可扩展性也非常好。

所以,这是我添加的 NuGet 包。 AspNetCore.SignalR。NCache 你可以搜索。 它已经安装好了。 您需要做的就是再次通过应用设置获取缓存名称,然后是扩展方法。 所以,如果你有 services.AddSignalR,我们有一个扩展方法,它添加 NCache 有一个 SignalR Backplane ASP.NET Core 领域广泛应用,提供了卓越的解决方案。

// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<NCacheConfiguration>(Configuration.GetSection("NCacheConfiguration"));
    services.AddSignalR().AddNCache(ncacheOptions =>
    {
        ncacheOptions.CacheName = Configuration["NCacheConfiguration:CacheName"];
        ncacheOptions.ApplicationID = Configuration["NCacheConfiguration:ApplicationID"];
        // Uncomment in case of cache security enabled.
        //ncacheOptions.UserID = Configuration["NCacheConfiguration:UserID"];
        //ncacheOptions.Password = Configuration["NCacheConfiguration:Password"];
    });
}

我会很快运行它,因为它需要一些时间。 我认为很多事情都在运行。 所以,我将运行这个示例。 因此,这将启动一个聊天应用程序,它将在幕后使用 Pub/Sub 消息传递 NCache. 所以,我真正要做的是,我会回到这里,在服务器端,我会向您展示一些性能计数器,这将允许您专门管理和监控 Pub/Sub 消息,并且 SignalR 正在使用 Pub/幕后的子消息。 所以,让我说 SignalR,对。 所以,如果你注意到这里我们有消息部分就在这里。 我们可以在其中看到消息存储大小、消息计数、每秒传递、每秒过期、已发布、主题计数。

主题允许您分离关注点。 多个应用程序使用 NCache 作为一个 SignalR Backplane 他们将在内部创建多个主题 NCache. 因此,可以将类似性质的消息的主题赋予单独的主题。 例如,您可以为订单创建主题。 您可以为消息客户创建主题。 因此,您可以在不同的主题中拥有不同的消息,并且连接到单独主题的订阅者只会获得与它们相关的那些消息。 所以,已经在这里看到了一些活动,这意味着我的应用程序已经启动并正在运行。 所以,如果我回到服务器仪表板,现在我们正在运行三个应用程序。 我不会在常规统计中看到任何内容。 我会在消息统计中看到所有内容。 因此,您可以看到消息计数。

所以,有一些消息,存储大小,大约是 800 字节。 消息发布,然后我们有我认为日期的其他参数不存在,因为我们还没有任何到期。

所以,回到我的应用程序,我会运行另一个实例。 好的,所以,我有两个应用程序。 应该以隐身方式运行它,但一旦发送它就测试消息,它也被发送到这里。 测试消息 2,您也会在另一边看到该消息,对,如果我回到这里,我们会在这里进行一些活动。

因此,它在幕后使用 Pub/Sub 消息传递,它允许您创建背板。 因此,SignalR 本身,它的用例,它强调推送通知而不是用户轮询,您可以将内容推送给用户。 但是对于网络农场,您只能将内容推送到连接的客户端到该网络服务器。 如果您有多个 Web 服务器,则需要一个中央主体和 ASP.NET 和 ASP 的背板.NET Core 解决了这个问题。

因此,您可以使用 NCache 作为背板。 这是一个通信平台,所有消息都被转发到 NCache,发送到 NCache 然后 NCache 反过来发送到所有网络服务器,广播它,这些网络服务器最终能够将这些消息传输给他们的最终用户。 所以,这就是让整体架构非常快的原因,因为 NCache 在内存中。 它超快、非常可扩展、非常可靠、高度可用。

好的。 所以,我认为我们在这方面做得很好。 任何问题? 否则,我将继续讨论数据缓存方面。 因此,我们将在最后 10 到 15 分钟的时间用于数据缓存和一些功能。 这方面有很多功能。 所以,我会很快展示一些。

所以,首先有很多方法可以使用 NCache 用于数据库缓存或应用程序数据缓存。 你在哪里缓存数据 NCache &您将旅行保存到后端数据库。 如果您已经在使用 IDistributedCache,虽然这非常有限,但您可以插入 NCache 作为提供者。

我在这里有一个示例应用程序。 同样,它非常简单。 您需要添加 NuGet 包。 这是 ASP.NET Core 和 NCache.Microsoft.Extensions.Caching。

public async Task<IActionResult> onPostResetCachedTime()
{
    var currentTimeUTC = DateTime.UtcNow.ToString();
    byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
    var options = new DistributedCacheEntryOptions()
        .SetAbsoluteExpiration(TimeSpan.FromSeconds(20));
    _cache.Set("cachedTimeUTC", encodedCurrentTimeUTC, options);

    return RedirectToPage();
}

因此,这涵盖了 IDistributedCache,然后您需要在其中指定缓存名称和插入的 startup.cs 内部的应用程序设置。services.AddNCacheDistributedCache 通过配置提供设置,或者您可以在指定配置的地方使用选项二,直接通过代码进行所有设置。

public void ConfigureServices(IServiceCollection services)
    {
        // Reading NCacheSettings using appsettings.json
        services.AddNCacheDistributedCache(_config.GetSection("NCacheSettings"));

        services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2);
    }

而且,在 index.html.cs 中,我们有一些方法。 我们在哪里调用 cache.GetAsync。

public string CachedTimeUTC { get; set; }
public async Task OnGetAsync()
{
    CachedTimeUTC = "Cached Time Expired";
    var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

    if(encodedCachedTimeUTC != null)
    {
        CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
    }
}

您需要注意的一件事是这个 IDistributedCache 接口,例如,如果我向您展示 GetAsync,它会取回一个字节数组。 因此,它不是您获得的序列化或反序列化对象。 您必须自己进行序列化和反序列化。

using System.Threading;
using System.Threading.Tasks;

namespace Microsoft.Extensions.Caching.Distributed
{
public interface IDistributedCache
{
    byte[] Get(string key);
    Task<byte[]> GetAsync(string key, CancellationToken token = default);
    void Refresh(string key);
    Task RefreshAsync(string key, CancellationToken token = default);
    void Remove(string key);
    Task RemoveAsync(string key, CancellationToken token = default);
    void Set(string key, byte[] value, DistributedCacheEntryOptions options);
    Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, 
    CancellationToken token = default);
}
}

我们在这个示例中所做的,实际上我们采用了这样一种方式,即我们在添加之前序列化对象,在检索之后我们正在反序列化它,对吧。 所以,我们通过这个来取回字符串。

public string CachedTimeUTC { get; set; }
public async Task OnGetAsync()
    {
        CachedTimeUTC = "Cached Time Expired";
        var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

        if(encodedCachedTimeUTC != null)
        {
            CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
        }
    }

所以,这是我们已经广泛开展的工作,也是您必须要做的。 和 NCache 直接用作您的应用程序数据缓存平台,您不必做所有这些。 NCache 将自动序列化和反序列化您的对象。 您只需要将它们标记为可序列化。

所以,我要快速运行这个示例,这应该让我也能展示 IDistributedCache 接口,最后在运行时我也想构建,所以,这是我们的 IDistributedCache 接口,这是第二个我在这里展示的选项是直接的 NCache 蜜蜂。 这是我们的 API。

/*Cache Connection*/
Cache cache = NCache.InitializeCache("myCache");
cache.Dispose();

/*Fetching Data*/
Employee employee = cache.Get<Employee>("Employee:1000");
bool isPresent = cache.Contains("Employee:1000");

/*Writing Data*/
cache.Add("Employee:1000", employee);
cache.AddAsync("Employee:1000", employee);

cache.Insert("Employee:1000", employee);
cache.InsertAsync("Employee:1000", employee);

Employee employee = (Employee) cache.Remove("Employee:1000");
cache.RemoveAsync("Employee:1000");

或者,如果您通过直接管理所有内容,我们强烈建议您获得更多控制权 NCache API 调用。 你连接到 NCache 在当前版本中使用初始化缓存或获取缓存,然后说缓存。获取以检索项目缓存。添加以添加项目。 Add Async 也可用 Insert 和 Insert Async 也可用,然后您可以调用 cache.Remove。 因此,这是我将在此示例运行并支持 IDistributedCache 后展示的第二种方法,但相比之下,我们的直接 API 功能更丰富。

问题: 我们可以用 NCache API 以及 IDistributedCache 以及我们在哪里可以获得样本?

所以,首先是的,你可以使用 IDistributedCache。 您必须已经在使用 IDistributedCache。 所以,你可以插入 NCache 作为一个来源。 因此,这可能是一个起点,除此之外,您还可以开始在同一应用程序中使用我们的直接 API。 所以,是的,你可以这样做。 我们不限制您使用其中一种。 我们讨论过的所有这些用例会话缓存、响应缓存、 SignalR Backplane, IDistributedCache 或直接 NCache API 调用。 其中五个功能,您也可以在单个应用程序中使用所有这些功能。 所以,这就是美 NCache 您可以在其中组合所有这些用例。

示例应用程序,所有这些示例都是,它们都安装了 NCache, 对。 所以,我们在这里没有使用任何自定义。 所以,所有这些都可以在程序文件样本中找到, NCache 样品。 这些也发布在我们的网站上。

所以,这个示例已经运行。 所以,如果我重置缓存时间,它会这样做,如果我很快回到这里,我会展示缓存键,现在你会看到更多的缓存键。 我认为有些项目已过期,但您会看到缓存时间 UTC。 某些响应缓存对象必须已过期。

所以,这就是你使用 IDistributedCache 接口的方式 NCache.

现在我将展示直接 NCache API 调用,我们强烈推荐。 这也是你可以做的事情。 因此,为此您可以使用 Alachisoft.NCache.SDK NuGet 包。 那是我们完整的 SDK,它引入了整个客户端资源,所有功能都可以使用这个 SDK 在客户端公开,基于此,我可以说包括这些命名空间 Alachisoft.NCache。客户 你也可以包括 Alachisoft.NCache。运行 因为您可以通过它使用一些高级功能。

using Alachisoft.NCache.Runtime;
using Alachisoft.NCache.Sample.Data;
using Alachisoft.NCache.Client;
using System;
using System.Configuration;
using Alachisoft.NCache.Runtime.Caching;

namespace Alachisoft.NCache.Samples
{
    public class BasicOperations
    {
        private static ICache _cache;
    }
}
...

缓存接口。 这是我们自己的接口,与 IDistributedCache 不同,对吧。 所以,我们有很多功能,你可以在比较中看到,在这些功能中,我们也有多个功能。 所以,这些是 ICache 上的一些对象。

因此,您可以初始化缓存。 初始化是通过 NCache。客户. 缓存管理器.GetCache,所以,这就是你连接到它的方式。 您获得一个缓存句柄,并使用该缓存句柄,您可以设置一些基于时间的到期。 给出在这种情况下是客户的对象, 添加对象到缓存 我们得到了一个客户。 然后你说缓存。添加一个键值项被添加。 因此,当您添加到缓存中时,客户对象将自动序列化,然后通过 cache.Get 进行检索,通过 cache.Insert 进行更新,您可以在其中更改一些值。 更改到期时间,然后您可以调用 cache.Remove 来删除数据。

所以,在这个样本中,如果很快。 好的。 因此,它从应用程序设置中获取缓存。 如果我将此缓存的名称命名为 asp 核心缓存,这也将开始使用相同的缓存进行数据缓存,并且您已经看到了我在不同应用程序中使用相同缓存的地方,但是,如果它是一个大型应用程序使用所有这些功能相互结合,相互结合,也受到支持。

因此,虽然它正在运行,但有许多功能。 我只是在示例中显示一两个,因为这些只是基本操作,这会在缓存中添加一些数据。 它可能不会在任何时候停止,我不太确定,但让我们看看。 同时,如果我向您展示一个客户端已连接。 它做了一些操作,对。 让我们希望吧。 让我在某个地方设置一个断点,然后再运行一次。

所以,它真正做的是,它实际上初始化了缓存,添加了一个对象,检索它,更新它,再次检索它,然后删除它,然后缓存被释放。 所以,在 dispose 之前我已经放了一个断点,所以希望你现在可以看到缓存中的初始化、添加、获取、详细信息更新和更新。 因此,所有这些方法都已执行。

所以,运行这个示例就是这么简单。 您只需要 NuGet 包和要包含的命名空间,然后使用不同的 API,我将在此处展示。

许多功能可用。 我将在最后 5 到 6 分钟的时间里花在不同的功能上,这些功能是我们直接提供的一部分 NCache 蜜蜂。 因此,您可以使用基于时间的到期。 绝对和滑动到期可用。 绝对是当您预先给出时间并且在该时间过去之后数据将被删除。 滑动是,如果您继续使用该数据,假设您有 10 分钟的滑动到期,如果您在 10 分钟内不访问该项目,那么它才会被删除。 否则,如果您继续使用该对象,它将保留在缓存中。

您可以将缓存与数据库同步。 缓存项目内容的任何更改,对。 例如缓存项在数据库记录中的任何更改。 如果您缓存了属于数据库的项目,则数据库中的任何更改都会使缓存中的项目无效,并且我们对此有一个基于事件的 SQL 依赖项。 我们有基于数据库的依赖,数据库轮询依赖,它是基于轮询的。 它汇集更改,如果发现数据库中的某些记录已更改,它将从缓存中删除相应的项目。 .NET CLR 存储过程,您可以在其中直接 NCache 直接从数据库服务器调用 API。 您也可以将缓存与非关系数据库同步。 可用的文件依赖项。 您可以使缓存项依赖于文件。 或者它也可能是自定义依赖项,您可以在其中运行代码寄存器 NCache 这将确定该项目是否必须从缓存中过期。 因此,根据您的业务逻辑,您可以使缓存中的项目过期。 我们有关键的基础依赖。 您可以使用它来处理缓存项目之间的关系。 因此,可以在内部管理一对一、一对多和多对多的关系 NCache.

服务器端支持,代码支持非常广泛。 您可以使用缓存搁置模式,也可以使用直读和直写模式,您可以从缓存中读取缓存,如果数据不在缓存中,您可以通过运行您的提供程序来读取缓存。 它是您实现并向我们注册的接口,您可以通读缓存并获取该项目或从后端数据库中破坏它。

而 write-through 则与之相反,您可以在其中更新缓存,然后您还可以通过调用 write-through 处理程序自动更新后端数据库,您实现并注册和 write-behind 的接口将异步更新后端数据库,相比之下,这是非常快的,您甚至不必进行写入操作,您的缓存项目只会在缓存中更新,您的应用程序返回,然后在后台缓存将更新后端数据库。

组、子组可用。 您可以在里面创建逻辑集合 NCache. 支持标签。 您可以在项目上附加关键字,并且可以根据相应的标签检索、删除或获取甚至播放或搜索项目。

SQL Like 搜索可用。 支持 SQL 和 LINQ 搜索。 您可以根据项目的属性搜索项目。 您可以运行搜索条件,例如选择产品,其中产品是对象类型,并说选择 product.price 大于 10 且 product.price 小于 100 的产品。因此,根据您指定的条件 NCache 将在您的应用程序中制定结果集。

而且,还支持 LINQ 查询。 这些是平行的。 作为其中的一部分,支持数据索引。 您需要它作为必须的,这使得它可以非常快速地搜索 NCache.

Pub/Sub 消息传递和事件

Pub/Sub 消息传递和事件是一个单独的功能。 我们拥有异步事件驱动的 Pub/Sub 消息传递平台。 我们有基于标准的连续查询,您可以在其中映射数据集并从该数据集中获取事件。 例如,您可以映射所有产品价格低于 100 的产品。因此,这可能是您的数据集。 该数据集的任何更改都会通知您。

关键基础事件可用。 因此,如果某个项目被更新或删除,或者它可能是正在监视所有项目的缓存级别,您可以获得通知。

动态缓存集群

最后一些关于的细节 NCache 聚类。 它基于动态缓存集群协议。 NCache 允许您即时添加或删除服务器。 因此,没有单点故障。 如果任何服务器出现故障,它会在协议内进行管理。 如果您添加更多服务器,它会自动开始使用新添加的服务器。 如果服务器出现故障,即使在这种情况下,您也没有停机时间,并且没有单点故障,主要是因为有多个服务器托管此缓存。

就您的应用程序而言,添加和删除服务器是无缝的。 为您提供 100% 的正常运行时间、高度可用的缓存方案,然后我们已经介绍了拓扑。

我们有一些 客户端缓存. 广域网复制 特征。 您可以在主动-主动或主动-被动站点之间进行站点到站点复制。 这也是管理的。

分布式缓存的广域网复制

所以,你知道名单还在继续。 我想我们已经介绍了很多细节,我想给你一个快速概述,你可以如何实际使用 NCache 在 ASP.NET Core. 所以,我们已经接近这个演示文稿的结尾了。 我想一小时标记。

我想,到此为止吧。到目前为止,如果还有任何问题,请告诉我?否则我会把它交给扎克,然后他可以从那里拿走它。任何问题?我们将让会场开放大约一分钟。如果您有任何疑问或仍在思考某些问题,请随时将它们扔掉。

虽然我们正在这样做,但我们几乎涵盖了您所看到的所有这些功能。 ASP.NET Core 会话,响应缓存, SignalR Backplane, IDistributedCache, 数据缓存和直接 NCache API 调用,我们甚至还有 Pub/Sub 消息传递的示例应用程序,如果您对本节单独感兴趣,您也可以获得单独的示例应用程序。

问题: 以后会提供此演示文稿吗?

是的,会的。 我们不仅可以获得网络研讨会的录音,而且如果您想下载和使用这些幻灯片,我们还将提供幻灯片,一旦准备好,您将收到一封电子邮件,将您链接到录制的网络研讨会。 因此,您可以在我们的网站上线后随时访问我们的网站,并且在录制的网络研讨会中,您可以找到它们。

问题: IDistributedCache 和 IDistributedCache 有什么区别 NCache ASP.NET Core 会话存储提供者?

好的,所以,我相信问题更集中在通过 IDistributedCache 和 Session 通过我们的缓存提供程序使用它的会话使用差异上。 因此,在高级别的 IDistributedCache 的功能方面是有限的。 NCache 提供者为您提供更多控制权。 首先,您可以使用会话锁定。 IDistributedCache Session 是基于非锁定的存储。 您可以使用单站点和多站点会话。 这是里面的一个特定功能 NCache 这在 IDistributedCache 中不可用。 虽然, NCache 按原样支持 IDistributedCache 会话提供程序。 它在 IDistributedCache 之上为您提供了很多好处,但是当我们将 IDistributedCache 会话与 NCache 而且你知道, NCache 会话存储提供程序 NCache,那就是 NCache 供应商有明显的优势。 然后还有很多功能,例如不同应用程序之间的会话共享。 您可以指定一个会话 App ID 属性。 您的异常可以记录到事件日志中,可以创建缓存日志,可以创建客户端日志。 因此,这两者之间有很多不同的功能。

因此,强烈建议您使用会话缓存 NCache,所以我个人建议与 IDistributedCache Session 相比,查看我们的会话存储提供程序 NCache 因为你得到了很多好处。

问题: 分组数据如何使数据检索更容易?

对。 因此,您将一个组附加到多个项目,然后有基于组的 API,您可以在其中获取组数据,然后一次获得所有这些项目。 因此,您不必单独提供这些单个对象的键。 因此,只需一次 API 调用,即可检索所有组数据。 您可以在一次 API 调用中删除数据。 因此,相比之下,检索和更新过程更容易。

 

联系我们

联系电话
©版权所有 Alachisoft 2002 - 版权所有。 NCache 是 Diyatech Corp. 的注册商标。