NCache 正如我们现在所知,将数据存储在缓存中以获得更好的性能并实现高性能和可扩展性。 我们已经看到 NCache 在快速访问数据以提高应用程序性能方面做得很好,但是,我们仍然需要了解什么样的数据可以 NCache 存储在缓存中。 和数据库一样, NCache 让您通过简单的步骤添加数据,并且在数据添加方面非常灵活,并提供了一堆数据类型,可以满足几乎所有类型的应用程序的需求。 这个博客是关于形式的 NCache 通过为您提供最大的便利,将您的数据存储在缓存存储中。
键值对
对于初学者来说, NCache 是一个键值存储,明确指出 NCache 存储数据,以便有一个针对该值的键。 一种 键 是一个基于字符串的标识符,并具有以下属性列表:
- 密钥应该是唯一的,并且不允许复制密钥 NCache.
- 键不能为空。
- 键是区分大小写的。
A 折扣值 是存储在缓存中的对象的值。 稍后我们将在博客中查看所有支持的类型。 这解释了键值对,其中键用作针对它存储的值的标识属性。 图 1 说明了如何在缓存中添加和存储数据:
支持的数据类型 NCache
NCache 支持对象形式的数据。 这些对象可以是以下任何一种形式:
- 原始类型
- 自定义类对象
- 数据结构
- JSON数据
原始数据类型
NCache 支持所有 .NET 原始数据类型。 您可以将字符串作为值添加到键中。 以下是支持的类型 NCache:
字节/sbyte | 短/超短 | 对象 | 绳子 | 翻番 | 布尔 | 时间跨度 |
整数/整数 | 长/乌龙 | 坦克 | 浮动 | 十进制 | 约会时间 |
让我们快速浏览一个简短的代码示例,该示例显示了针对缓存中的键添加字符串:
1 2 3 4 5 6 7 8 |
// Specify the customer name as string string customerName = "John Wick"; // Generate a unique cache key string key = "Customer"; // Add the string to cache cache.Add(key, customerName); |
自定义类对象
自定义类对象是指 .NET 或 Java 类对象,例如 Products 或 Orders 或 Customers 等。唯一且非常重要的条件 添加自定义类对象 到你的缓存是为了标记数据 可序列化. 您可以通过以下任一方式序列化缓存中的类:
- 在您的自定义类中添加 .NET Serializable 属性或
- 运用 动态压缩序列化 这是一个由 NCache 为注册的类动态地提供具有成本效益的序列化。
但是,无法将未序列化的数据添加到缓存中。 看着那(这 序列化 有关缓存数据序列化的更多详细信息部分。
让我们在下面的代码中的缓存中添加一个自定义类对象。 在将数据添加到缓存标记之前,它已序列化,如下所示:
1 2 3 4 5 6 7 8 |
[Serializable] public class Product { public int ProductID { get; set; } public string ProductName { get; set; } public string Category { get; set; } public int Price { get; set; } } |
1 2 3 4 5 6 7 8 |
// Get product from database against given product ID Product product = FetchProductFromDB(1001); // Generate a unique cache key for this product string key = $"Product:{product.ProductID}"; // Add Product object to cache CacheItemVersion version = cache.Add(key, product); |
数据结构
NCache 在自然界中分布提供了以下功能 常规数据结构 允许在不影响数据一致性的情况下添加、删除和检索数据。 以下是支持的数据结构 NCache:
- 分布式列表: IList 接口的本机 .NET 实现。 例如,在电子商务平台上,客户添加/删除项目可以使用 分布式列表.
1 |
IDistributedList list = cache.DataTypeManager.CreateList(key, dataTypeAttributes); |
- 分布式队列: 称为分布式队列的项目的先进先出 (FIFO) 实现。 例如,情报机构为过滤出威胁性推文而进行的情绪分析可以使用 分布式队列 将推文存储在其中。
1 |
IDistributedQueue queue = cache.DataTypeManager.CreateQueue(key); |
- 分布式哈希集: 一种无序数据类型实现,其中集合的值是唯一且独特的。 例如,如果您有一家在线书店, 哈希集 可以帮助您确定哪个用户对哪些书感兴趣或购买了多少本书。
1 |
IDistributedHashSet userSetMonday = cache.DataTypeManager.CreateHashSet(mondayUsersIds); |
- 分布式字典: 一个键值对,它是 IDictionary 接口的本机 .NET 实现。 一个值是针对某个键保存的,例如,您可以存储登录凭据,即用户名和密码,格式为 分布式字典 在分布式缓存环境中。
1 |
IDistributedDictionary<string, Product> dictionary = cache.DataTypeManager.CreateDictionary<string, Product>(key); |
- 分布式计数器: 用于轻松增加或减少值的数据结构。 例如,要统计网页每小时或每天获得的浏览量,可以使用以下方法轻松实现 分布式计数器.
1 |
ICounter counter = cache.DataTypeManager.CreateCounter(key, initialValue); |
查看下面的代码以了解如何使用分布式列表 NCache 在缓存中添加产品列表的位置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Specify unique cache key for list string key = "ProductList"; // Create list of Product type in cache IDistributedList list = cache.DataTypeManager .CreateList(key); // Get products to add to list Product[] products = FetchProducts(); foreach (var product in products) { // Add products to list list.Add(product); } |
JSON 数据在 NCache
JSON 是应用程序使用的一种轻量级可读语言,速度极快,并受到所有主要 JavaScript 框架的支持。 NCache 让你 添加您的 JSON 数据 通过提供一些从基类 JsonValueBase 派生的类,可以轻松地在缓存存储中。 让我们看看提供的类 NCache:
- json对象: 本篇 程 用于无序的名称-值对,其中名称是对象的名称,值是可以是任何原始类型的 JSON 对象的值。
- json值: 本篇 程 表示 JSON 约定中的原始数据类型,例如字符串、整数或 DateTime。
- json数组: 本篇 程 表示项目的集合,并表示 JArray 在 NCache的域。
- JsonNull: 此类表示 JSON 标准中的 NULL 值。
下面的代码展示了 JSON 在 NCache 带有代码示例。 该代码示例显示了一个由字符串构成并插入缓存的 JsonObject。
1 2 3 4 5 6 7 8 9 10 11 12 |
var product = GetProductFromDB(); string jsonString = $@"{{ 'ProductID': { product.ProductID}, 'ProductName': '{product.ProductName}', 'Category': '{product.Category}', 'UnitsAvailable' : { product.UnitsAvailable} }}"; JsonObject jsonObject = new JsonObject(jsonString); cache.Insert(key, jsonObject); // Fetch the jsonObject previously added var jsonObject = cache.Get(key); |
JSON支持 NCache 分布式数据结构 将数据添加到缓存
位置关联性
的一个附加功能 NCache 为提供更高的性能是 位置关联性. 为了让您的应用程序获得更高的性能和更好的结果, NCache 使您可以控制将两个不同类的数据保存在同一节点上。 这在属于不同类的不同项目之间创建了关联,因此在获取这些项目时节省了匹配成本。 您需要做的就是添加具有相似大括号 {} 的亲和性的项目,从而确保这些项目存在于同一节点上。 例如,Order_{Product:1001}”显示属于产品对象的订单与产品密钥 1001 之间的关联性。
让我向您展示一个代码示例,其中 热销产品 和 订单 使用位置亲和性添加到同一节点上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Product product = FetchProductFromDB(1001); string productKey = "Product:1001"; var productCacheItem = new CacheItem(product); // Add CacheItem to cache CacheItemVersion version = cache.Add(key, productCacheItem); Order order = FetchOrderFromDB(17); // Unique order key for this order using Location Affinity syntax // This will create an affinity for this orderKey with the respective productKey string orderKey = "Order_{Product:1001}"; var orderCacheItem = new CacheItem(order); // Add order with Location Affinity to cache CacheItemVersion version = cache.Add(key, orderCacheItem); |
结论
总之, NCache 提供灵活的方式将数据添加到满足应用程序要求的缓存中。 您需要做的就是使用一个简单的 API 来将数据添加到缓存中。 关于最好的部分 NCache 是每个新版本,在新功能的支持下,添加数据变得更容易和更高效。 您可以查看其他很酷的功能 NCache 此处.