title: CRUD Operations In Data Cache: An Overview description: Manage data cache with CRUD operations: sync for control, async for responsiveness, and bulk for performance.
典范: https://www.alachisoft.com/resources/docs/ncache/prog-guide/basic-cache-operations.html
CRUD Operations In Data Cache: An Overview
NCache 将数据存储为键值对,即针对数据(值)存储唯一标识符(键)。 类似于键值数据库, NCache 还通过 CRUD 操作存储、检索和管理数据。 在这方面, NCache 提供一组不同的 CRUD API,用于同步或异步缓存原子或批量数据。 在这里,我们提供了一个概述 NCache-支持的基本CRUD操作: 地址, 插页, 积极及 删除.
Before moving forward, you must know what to store in the data cache. Besides the conventional string-based values, NCache 允许添加 原始数据类型, 自定义对象, 带有元数据的数据 (缓存项), 数据结构及 JSON 数据.
Any object added to the data cache must be serializable. NCache 根据您的商店格式处理二进制和 JSON 序列化。 如果您无法执行本机二进制序列化, NCache 还提供了自己的 紧凑的序列化框架. 对于 JSON 存储, NCache 处理提供的对象的序列化。 或者,您可以添加 NCache 提供 JSON 序列化对象,它支持跨平台和多语言应用程序。
Operation Types in Data Cache
NCache 允许对单个或批量项目进行 CRUD 操作。 同时,支持的操作模式有同步和异步。 这里我们简单介绍一下操作类型和模式 NCache.
原子操作
备注
此功能也可用于 NCache Professional.
我们将对单个键值对执行的所有操作归类为原子操作。 因此,此类操作需要单个缓存调用。 原子的行为 添加,插入, 去掉及 得到 操作将在后面的部分中讨论。
批量操作
备注
此功能也可用于 NCache Professional.
批量操作允许您通过单个缓存调用对多个项目执行任何 CRUD 操作。 虽然批量操作作为单个操作执行,但操作的失败是单独处理的。 它们专为提高性能而设计。 例如,在单个批量操作中检索 100 个缓存项比通过 100 个原子调用检索它们执行得快得多。 这样,由于减少了到远程服务器的网络访问,性能得到提高。
批量操作对于在应用程序启动时批量获取缓存数据或将查询结果批量插入缓存特别有用。
同步操作
备注
此功能也可用于 NCache Professional.
NCache 允许同步添加一个原子项目或大量项目。 由于同步操作是作为阻塞调用发生的,因此客户端必须等待服务器的响应才能执行进一步的操作。 一旦操作发生,控制就返回到应用程序。
尽管客户端必须等待操作完成,但同步操作允许在控件返回给用户时返回操作的成功/失败状态。 由于与缓存的连接失败或内部系统错误,此类操作可能会失败。 此过程为应用程序提供控制,以便在遇到任何故障情况时立即进行处理。 因此,当您处理关键数据时,这些操作必不可少。
Furthermore, synchronous operations are sequential. This is useful if your operations are dependent on each other. For example, an e-commerce site synchronously adds items that are on flash sale for 2 hours only and later on retrieves those items that have a flash sale. While fetching the cached items on sale, failure can be avoided if it ensures that these items were successfully added to the data cache first. The basic CRUD operations are synchronous by default if not stated otherwise.
异步操作
Asynchronous operations occur in the background, so the client does not have to wait for the response from the server to execute further operations. The list of actions to be performed on the data cache is maintained in a queue on the client side, and a dedicated background thread keeps on sending them to the server side. The control returns to the application immediately after an operation is queued. This increases the overall responsiveness of the application.
当响应时间对您的应用程序至关重要并且操作失败不会妨碍您的应用程序的工作时,异步操作可能很有用。
由于异步操作不会通知操作本身的失败或成功,因此异步调用 NCache 返回一个对象 任务类 可以进一步用于获取操作的状态。 在这方面,Task 类提供了以下状态标志来指示所执行操作的成功或失败。
- 完成了: 通知指定的操作是否在缓存中成功发生。
- 出现故障: 通知指定的操作是否发生但失败。
- 已取消: 通知指定的操作是否由于任何内部原因而取消。
Basic CRUD in Data Cache
一旦你可以与缓存交互 获取缓存实例. 让我们看看支持的基本 CRUD 操作的工作和行为 NCache.
添加/插入
可以使用将项目添加到缓存中 地址 or 插页 方法。 但是,这两种操作的行为不同。 Add
仅当提供的键不存在于缓存中时,才使用特定键成功将项目添加到缓存,否则抛出异常。 假设您要禁止多个客户端同时将项目添加到缓存中。 然后你可以使用 Add
如果客户端尝试添加缓存中已存在的项目,则通知操作失败的方法。
另一方面, Insert
也可以作为更新操作。 如果您使用 Insert
方法,并且指定的键已经存在于缓存中,缓存中的现有项将被替换。 除了添加项目外,它还安全地更新缓存中的项目。
最简单的情况是通过指定键和值直接向缓存添加或插入项。 但是,这些方法有多个重载,允许您使用高级选项将项目添加/插入到缓存中。 添加/插入的相关用例和行为在下面讨论。
- 添加大量数据: 可以使用
AddBulk
/InsertBulk
方法。AddBulk
如果您特别请求无法添加具有现有密钥的项目的通知,则可以使用。 在这方面,通过向应用程序返回指定相应键的字典来单独突出显示失败的操作。 例如,如果将 100 个项目批量添加到缓存中,而其中 20 个项目已存在于缓存中,则剩余的 80 个项目将添加到缓存中。 现有的 20 项将作为失败操作的字典返回给应用程序。
如果您想在添加多个项目以更新现有项目时避免失败,您可以使用 InsertBulk
方法。 它会覆盖缓存中的现有项目,并返回一个由于任何原因未能添加/更新的键的字典。
异步添加数据: 当您想提高客户端应用程序的效率时,可以将项目异步添加/插入到缓存中。
AddAsync
/InsertAsync
方法在后台添加项目并在操作完成后返回 Task 对象。 客户端可以检查中提到的状态标志 异步操作 无需任何额外代码即可验证添加/插入操作的成功或失败。添加具有依赖关系的数据: 您可以使用依赖项将项目添加/插入到缓存中。 由于缓存数据是临时的,因此可能需要根据用户特定的标准从缓存中删除某些数据。 在这种情况下, NCache 通过允许您在添加/插入项目时设置依赖关系,提供各种使缓存数据无效的方法。 具体来说,您可以根据 次, 缓存数据, 数据库和外部源,根据您的应用程序要求使某些项目失效并最终删除。
并发写入: 您可以将项目插入缓存 锁定 在多线程或多客户端应用程序的情况下控制同时访问。 当在缓存中执行并发更新操作时,它有助于维护数据完整性。 您可以独占锁定某个项目,也可以处理添加到缓存中的项目版本。 项目版本由缓存为缓存中的每个项目维护,并且在每次执行更新操作时自动递增。
写入数据源: 在高级情况下,如果配置了数据源,则在添加/插入操作期间,数据将在缓存以及数据源中添加/更新。
请求执行流程: 当发生添加/插入操作时,底层请求执行过程遵循以下步骤:序列化、加密和压缩。 首先,对提供的数据进行序列化。 如果配置了加密,则在客户端进行加密。 由于通过网络传输的数据很容易被拦截,因此您可以使用以下方法加密您的敏感数据 NCache 数据加密功能 以保护其免受安全风险。 最后,如果启用压缩,加密数据将被压缩。 由于可用带宽和内存稀缺, NCache 数据压缩功能 让您显着减少网络流量和内存消耗。 最终,您的写操作执行得更快。
积极
缓存的有效性主要取决于其检索数据的能力。 可以使用 Get
通过指定存储项目的密钥进行操作。 如果缓存中不存在指定的项目,则返回空值,无一例外。
获取大量物品: 可以使用以下方法同时从缓存中检索多个项目
GetBulk
方法。 它以键值字典的形式检索在缓存中找到的项目。 如果缓存中不存在任何指定的键,则不会抛出异常。验证项目的存在:由于缓存是易失性的,因此您可能需要知道缓存中是否存在某个项目。 可以使用以下方式确定项目的存在 NCache 提供
Contains
方法。 此外,可以通过以下方式验证多个项目的存在ContainsBulk
方法。从数据源获取: 在高级情况下,如果配置了数据源,如果数据不存在于缓存中,将从数据源中获取数据。 更多详细信息,您可以参考章节 数据源提供者.
删除
要有效地管理陈旧数据和缓存存储,您可能需要明确删除数据。 您可以使用 Remove
方法。 如果指定的键在缓存中不存在,则返回空值。 您还可以根据您的应用需求获取移除的项目以进行进一步处理。 然而,在移除时获取对象的成本是不可避免的。 因此,当您不需要移除物品时,建议采用先前的方法。
删除大件物品: 可以使用
RemoveBulk
方法。 您还可以在字典中检索成功删除的项目。 但是,它可能会很慢,具体取决于删除时检索到的对象的大小。 因此,建议简单地删除项目,因为当您不需要处理删除的项目时效率更高。异步删除项目: 您可以使用
RemoveAsync
方法。 该项目将在后台删除,操作完成后,您将收到状态。 如果您想验证该项目是否已成功删除,您可以使用提供的 异步操作的状态标志.从数据源中删除: 在高级情况下,如果配置了数据源,则会在缓存和数据源中进行数据删除。 更详细的可以参考章节 数据源提供者.
备注
不比 Remove
和 RemoveBulk
, RemoveAsync
不会将删除的对象返回给应用程序。
在这个部分
将数据添加到缓存
解释如何将数据添加到缓存中。
更新缓存中的现有数据
说明如何更新缓存中存在的数据。
从缓存中删除数据
解释如何从缓存中删除数据。
检索现有缓存数据
解释如何从缓存中检索数据。