由于数据缓存是大多数分布式缓存的主要目标,因此,如果没有基本的 CRUD 操作,缓存就没有用处。本质上,由于缓存是键值存储,这些基于键的 CRUD 操作(创建、移除、更新、删除)使缓存易于访问和使用。为此,由于 NCache 因其分布式数据缓存能力而被广泛采用, 线性可扩展性和高可用性,它提供了全面的 CRUD API( 。NET, 爪哇岛, Node.js和 Python ) 来执行此类操作。本博客探讨了这些 API,并演示了如何在电子商务场景中轻松使用它们。
关键要点:
差异化写入逻辑: NCache 区分 添加 (仅限新品) 插页 (用于更新或添加),可精确控制数据在缓存集群中的存储方式。
减少网络延迟: 批量操作 允许在单个请求中操作多个项目,与单独的原子调用相比,显著降低了 I/O 开销。
无阻塞性能: 异步操作 使应用程序能够在后台执行 CRUD 任务,确保主应用程序线程保持响应且不阻塞。
内存效率: 通过利用这些 CRUD 操作,应用程序可以最大限度地减少昂贵的数据库访问,从而充分利用 NCache 作为高性能分布式临时数据存储。
基本 CRUD 操作
如前所述,缓存的基本目的是为应用程序提供临时数据存储。这意味着,无论何时需要特定数据项,您都可以检查缓存,而无需访问数据库。这对于频繁使用的数据尤其有用,能够显著提高应用程序性能。 NCache CRUD 操作为管理分布式数据提供了一个高性能接口,允许对键值对进行同步和异步操作,从而消除数据库瓶颈。鉴于此,让我们来探讨一下您可以使用的各种选项:
| API | 描述 | 句法 |
| 添加 | 将新数据添加到缓存中。 | 添加(键,值) |
| 插页 | 如果键已存在于缓存中,则更新值,否则将该项目添加为新项目。 | 插入(键,值) |
| 删除 | 从缓存中删除指定的键并返回其值。 | 删除(键) |
| 积极 | 检索所提供键的值。 | 获取(键) |
此外, NCache 还允许您使用元数据缓存数据, JSON 对象, 数据结构等等。此外, NCache 支持同步和异步操作。 同步操作 通常用于你必须确保你执行的操作在继续之前完成的情况。换句话说,这些操作是连续的。另一方面, 异步操作 更加灵活并在后台执行,同时控制立即发送回客户端。
在这种情况下,重要的是要注意所有 NCache SDK 客户端对象和 API 是线程安全的并且彼此独立。 这确保重用客户端实例始终是安全的,即使跨线程也是如此。

图 1:基本 CRUD 操作的架构流程 NCache 分布式集群。
中的操作类型 NCache
以下部分详细介绍了 NCache.
原子(同步)操作
对单个键值对执行的所有操作都归类为原子操作。因此,此类操作需要对每个项目进行一次缓存调用。例如,如果您有一个电子商务应用程序,并且想要将新产品添加到缓存中,请获取并更新其值,然后将其从缓存中删除。您可以使用以下方式轻松完成此操作 NCache CRUD API。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Precondition: Cache is already connected // Get product from database string productKey = $"Product:{product.ProductID}"; Product product = GetProductFromDB(productKey); // Add item in the cache. Add can be replaced with Insert depending on your requirement. cache.Add(productKey, product); // Retrieve cached item from the cache // Retrieve the Customer object Product retrievedItem = cache.Get(productKey); // Update the price of retrieved product retrievedItem.Price = 500; cache.Insert(productkey, retrievedItem); // Remove item from the cache cache.Remove(productKey); |
但需要注意的是,如果缓存中已经存在相同的键,则无法再次添加。为此,您可以使用 Insert 覆盖现有键的值。
原子(异步操作
异步操作更加灵活,在后台执行,同时控制权立即返回给客户端。在执行不太重要的操作(例如更新产品描述)时,您可以在电子商务应用程序中充分利用此功能。
NCache 支持多个异步重载来执行原子操作。 让我们看看如何使用 AddAsync, InsertAsync和 RemoveAsync 用于异步添加、更新和删除应用程序数据的 API。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Pre-condition: Cache is already connected // Get product from database var product = GetProductFromDB(1001); string key = $"Product:{product.ProductID}"; // Add item in the cache. AddAsync can be replaced with InsertAsync depending on your requirement. Task task = cache.AddAsync(key, product); // Wait before fetching data // Retrieve cached item from the cache var retrievedItem = cache.Get(key); // Update the price of retrieved product retrievedItem.Price = 500; // Add Product object to cache cache.InsertAsync(key, retrievedItem); // Remove item from the cache cache.RemoveAsync(key); |
批量操作
由于您可能需要在应用程序中同时执行多个操作, NCache 允许您在一次调用中对一大块数据执行 CRUD 操作。 这些操作旨在实现更好的性能,因为它们通过在单个缓存调用中完成大部分工作来减少对远程服务器的网络调用。
例如,如果您想在缓存中添加、更新或删除 100 个产品项目,您可以通过一次批量调用 加, 更新 or 去掉 这些项目而不是调用相关 API 100 次。 让我们看看如何使用单个批量调用来实现此目的。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Precondition: Cache is already connected // Get products from database Product[] products = FetchProductsFromDB(); IDictionary<string, CacheItem> dictionary = new Dictionary<string, CacheItem>(); foreach (var prod in products) { string key = $"Product:{prod.ProductID}"; var cacheItem = new CacheItem(prod); dictionary.Add(key, cacheItem); } // Inserting items in the cache IDictionary result = cache.InsertBulk(dictionary); // Retrieve items in bulk IDictionary<string, Product> retrievedItems = cache.GetBulk(keys); // Perform business logic here // Remove a chunk of keys from the cache cache.RemoveBulk(keys); |
下表突出了使用架构的优势 NCache的分布式内存提供程序,用于在多区域 Azure 环境中管理会话,其基础是传统的关系存储。
| 操作 | 用例 | 现有关键行为 | 网络影响 |
|---|---|---|---|
| 添加 | 初始数据填充。 | 失败(抛出异常/返回 False)。 | 低(单件)。 |
| 插页 | 更新/插入记录。 | 覆盖现有值。 | 低(单件)。 |
| 积极 | 个人记录检索。 | Returns & Exchanges 空 如果没有找到。 | 低(单件)。 |
| 删除 | 显式清除缓存。 | 如果密钥缺失,则不执行任何操作。 | 低(单件)。 |
| 批量操作 | 大规模数据迁移/同步。 | 支持多键操作。 | 已优化(分组请求)。 |
| 异步操作 | 后台任务/用户界面响应速度。 | 非阻塞执行。 | 极简(背景)。 |
结语
由于您现在熟悉了由 CRUD 支持的基本 CRUD 操作 NCache,您可以轻松开始使用它们来增强分布式应用程序的性能。您曾经对数据库执行的操作现在可以轻松复制到缓存中,从而显著缩短响应时间,从而增强用户体验。此外,您可以查看 NCache更高级的功能 今天就为您的 Web 应用程序、微服务、库和控制台应用程序提供支持。
常见问题
问:如果我使用……会发生什么? 添加 对缓存中已存在的键执行操作?
答: 添加 此操作仅针对新数据设计。如果键已存在,则操作将失败(返回错误)。 false 或者抛出异常),确保现有缓存数据不会被意外覆盖。
问:如何 删除 如果找不到指定的键,该方法会如何运行?
答: 删除 操作失败时不会发出任何声音。如果您尝试删除一个不存在或已过期的密钥, NCache 将在不采取任何行动或抛出错误的情况下完成调用,从而保持应用程序的稳定性。
问:返回值是多少? 积极 缓存未命中时的操作?
答:当您尝试检索缓存中不存在的键时, 积极 方法返回 空这样一来,开发人员就可以实现“如果为空”的逻辑,从主数据库中获取数据并重新填充缓存。
问:是 NCache CRUD 操作是在单个节点上执行还是在集群中执行?
答:虽然代码是通过单个客户端实例执行的, NCache 它内部处理分发逻辑。根据您的缓存拓扑结构,CRUD 操作会自动路由到包含该特定数据键的正确节点。






