title: Event Notifications in Cache: An Overview description: Receive real-time cache updates with event notifications, enabling seamless data sharing and management across applications.
典范: https://www.alachisoft.com/resources/docs/ncache/prog-guide/events-overview.html
缓存中的事件通知:概述
在分布式缓存范例中,您的客户端应用程序可能需要获得有关缓存中发生的各种操作的通知。 NCache can generate different types of events while your client applications can register for events of intere
备注
此功能仅在 NCache Enterprise.
以下是与缓存中的事件相关的一些要点:
- 仅当客户端应用程序已为其注册时,才会生成事件。
- 事件仅发布给订阅的客户端。
- 缓存确定何时引发事件,客户端确定响应事件要采取的操作。
- 客户端可以注册多个事件,也可以处理来自多个缓存的多个事件。
备注
应用程序将无法接收事件,除非它使用特定的事件注册 API 调用在缓存中注册自己。
缓存中事件通知的重要性
今天的许多应用程序需要在运行时彼此异步共享数据以提供数据完整性。 此外,他们需要更新数据状态或将数据快照与服务器端状态同步。 因此,应用程序需要一种机制来监视其与服务器的数据状态。 事件通知提供了这种机制,用于在每次缓存中的数据发生更改时通知客户端应用程序。
因此,事件允许 运行时数据共享 在不同的应用程序或同一应用程序的不同模块之间。 此外,事件驱动的数据获取支持 NCache 使客户端应用程序无需向缓存服务器发出任何显式数据获取请求即可接收数据。
活动 NCache
可以针对特定于数据或管理操作的缓存级活动引发事件。 在这里,我们对事件进行分类并讨论相关细节。
数据特定事件
顾名思义,当缓存中的数据由于以下原因被修改时会触发这些事件: 加, 更新或 去掉 操作。 除了这些基本的 CRUD 操作之外,在缓存中添加、更新或删除数据时也会触发特定于数据的事件,原因是 缓存启动加载器/刷新器 和 支持来源.
要注册这些事件以进行通知, MessagingService.RegisterCacheNotification
使用方法。 同样,如果不再需要,可以使用以下方法轻松取消注册特定于数据的通知: MessagingService.UnRegisterCacheNotification
方法。
您需要指定适当的 EventType
在注册特定于数据的事件时使用 事件类型 枚举。 可以根据已注册的情况触发以下通知 EventType
:
添加通知: 添加通知会在以下情况下触发
ItemAdded
事件类型已注册,并且新项目已添加到缓存中。更新通知: 当更新通知被触发时
ItemUpdated
注册事件类型并更新缓存中的现有项目。删除通知: 删除通知会在以下情况下触发:
ItemRemoved
注册事件类型并从缓存中删除一个项目。
您还可以使用以下方法控制事件执行时返回的信息 事件数据过滤器 这将在 事件过滤器 部分。
数据特定事件可以进一步分类如下:
缓存级别事件
缓存级别事件 是缓存的一般事件,在执行时触发 地址, 更新或 删除 对缓存数据的操作。 目的是通知不同的客户端有关在缓存上执行的每个操作。
警告
当为整个缓存数据集上的所有操作注册通知时,缓存级别事件可能会降低您的应用程序性能。
默认情况下,缓存级别事件对于任何缓存配置都是禁用的(缓存清除操作除外),必须启用才能使用 NCache 管理中心.
项目级别事件
项目级别事件 当您希望收到有关一组有限数据而不是缓存上执行的每个操作的通知时,这可能很有用。 例如,如果缓存包含大量数据,并且每次数据集发生任何变化时都会收到通知,这会导致开销并影响应用程序的性能。
备注
为了获得更好的性能,您可以仅为感兴趣的数据集注册通知。
缓存将负责监视指定键的更改。 由于所选数据集已存在于缓存中,因此仅在更新或删除操作时接收项目级事件。 应用程序使用 API 调用为缓存中的特定键注册回调方法,并在该键更新或从缓存中删除时收到通知。 这些通知异步发送到客户端,因此客户端活动不会产生任何开销。
备注
由于项目级别事件是针对已在缓存中的数据集注册的,因此无法接收添加通知。
管理层事件
管理层事件 可以注册以在使用缓存集群执行任何管理操作时收到通知 通知服务 界面。
这些事件可用于验证以查看操作是否继续在缓存上进行。 例如,客户端是一个多线程应用程序,其中一个线程专用于以恒定速率插入项目。 如果缓存在插入过程中停止, NCache 客户会抛出 OperationFailedException
。 为了防止抛出异常,线程必须在停止缓存时采取适当的操作。 这可以通过注册针对缓存停止操作的事件来简单地实现。
如果客户端应用程序的线程在清除缓存时在其执行期间验证操作,则此示例也适用于缓存清除通知。 如果客户端应用程序不考虑清除缓存事件,则所有验证都将失败。
对缓存执行管理操作时会触发以下通知:
缓存清除通知: 清除缓存时会触发缓存清除通知。
缓存停止通知: 缓存停止时会触发缓存停止通知。 如果应用程序在不知道缓存已停止的情况下继续执行缓存停止的操作,则会为执行的操作抛出异常。
会员加入通知: 当成员加入集群时,会触发成员加入通知。 缓存管理员或在操作期间监视缓存状态的用户可以自动执行监视集群状态的任务。 因此,如果成员加入集群,则应处理该事件以防止自动化任务出现任何中断。
会员离开通知: 当成员离开集群时,会触发成员离开通知。
客户活动事件
客户端活动事件通知客户端的连接/断开。 连接到集群缓存的每个客户端都可以订阅这些事件,以获得有关其他客户端的连接/断开事件的通知。
您还可以指定保留期,即断开连接的客户端被视为断开连接并触发其断开连接事件之前的时间。 如果客户端在保留期内重新连接,则不会触发其断开连接事件。
这是为了补偿由于错误的网络而发生的任何意外断开连接 NCache 客户端会自动在此类网络中重新连接,而不会中断客户端操作。 请注意,这不适用于手动处理和重新初始化自己的客户端。
您需要 启用客户端活动通知 in NCache 管理中心 使用前。
事件数据过滤器
NCache 提供 EventDataFilter
控制执行数据特定事件时返回的信息量。 下面解释事件过滤器的类型。
警告
必须仔细设置事件数据过滤器,以避免不必要的网络带宽消耗。
不包含
此过滤器仅返回受事件通知中操作影响的键。 如果应用程序只想知道哪些键受到影响,则使用此选项。 例如,电子商务网站想知道添加了哪些产品密钥,而不是值本身。
元数据
使用此过滤器,受影响的键及其元数据将在事件通知中返回。 返回的元数据包括 组, 缓存项优先级, 呼气, 缓存项版本, 重新同步选项, 缓存项移除原因及 条目类型。 用户可能需要此信息。 例如,当应用程序想要知道哪些键已从缓存中删除以及它们属于哪些组时。
数据与元数据
此过滤器返回键以及缓存项及其关联的元数据。 这可以在应用程序需要处理修改后的数据的情况下使用。 例如,银行应用程序可能需要知道哪个客户的信息已被修改。 因此,它可以使用此过滤器注册项目更新操作的通知,以便在触发事件后项目键和修改后的项目也返回给用户。
使用 DataWithMetadata
过滤器在使用再次获取项目时保存了一次旅行 积极 API。 但是,必须在必要时使用此过滤器,因为当返回的数据量很大时,它可能会导致网络占用。
警告
在客户端断开连接的情况下,在客户端断开连接的时间跨度内不会记录事件。
拓扑明智的行为
根据所使用的缓存拓扑触发事件通知。 事件通知的拓扑行为描述如下:
镜像拓扑: 在镜像拓扑中,集群的主动节点负责将事件通知给客户端。
复制拓扑: 在复制拓扑中,集群中连接到客户端的节点负责引发事件通知。
分区副本拓扑: 在分区副本拓扑中,事件从活动节点激发。 基于标准的数据所在的节点负责事件通知。
分区拓扑: 在分区拓扑中,事件从所有节点触发。 基于条件的数据所在的节点负责事件通知。
参见
.NET: Alachisoft.NCache.运行时.事件 命名空间。
Java的: COM。alachisoft.ncache。事件 命名空间。
节点.js: 事件缓存项 类。
Python: ncache.runtime.caching.events 类。