用于改进缓存搜索的索引
使用索引的目的是优化根据缓存搜索查找相关数据的速度和性能。出于搜索目的,所有可搜索的属性都应该建立索引。如果没有索引,搜索将扫描每个数据,这将需要大量的时间和计算能力。存储索引所需的额外计算机存储以及更新所需时间的显着增加,是为了在信息检索期间节省时间而进行的权衡。
NCache 内部使用不同模块中的索引来提高内部操作的性能。
缓存搜索索引
NCache 提供缓存搜索索引来提高缓存上查询的执行速度。出于搜索目的,所需要做的就是为所有可搜索的属性建立索引。 NCache 不会从缓存中搜索非索引属性,因为它必须遍历整个缓存才能找到相关数据,这会影响缓存性能。
此外,索引是根据缓存项的实际数据类型定义的。通过索引, NCache 知道将存储什么样的数据,并且将以可搜索的方式存储它。
NCache 提供了两种定义索引的方法。
- 预定义索引(静态索引)
- 运行时索引(动态索引)
预定义索引(静态索引)
备注
此功能也可用于 NCache Professional.
备注
建议避免索引不必要的字段,因为索引具有内存和性能开销。
要在集群缓存中搜索自定义类对象,需要提前定义该类的查询索引。这样,缓存将以易于查询的形式保存该数据。您可以通过以下方式定义索引 配置过程. 可以为公共、私有和受保护的原始数据成员配置索引。
备注
仅值类型支持索引。 引用类型不能被索引。
索引可以在缓存启动前通过配置定义。如果您想通过配置定义新的索引,则需要先停止缓存并在修改后重新启动以部署更改。随后添加到缓存的相关数据会自动建立索引。这些数据以后可以方便的查询。
警告
将引用类型显式标记为可索引将引发异常。
运行时索引(动态索引)
如果应用程序中有在运行时定义和使用的属性,则应使用运行时索引。例如,可能有一些计算值分配给与其销售相关的产品。当任何客户购买任何产品时,销售详细信息都会保存在缓存中,以便稍后通过缓存值生成销售趋势的每日报告。该值是在运行时定义的,因此它是产品的运行时属性。
NCache 会自动为缓存客户端添加的数据创建索引。这意味着在将索引用于运行时属性之前不需要配置索引。
以编程方式定义索引时,可以使用应用程序代码中的自定义属性将类或字段标记为可索引。 标记后,所有原始属性和字段都会自动编制索引。 由于您可能不需要索引所有字段,因此您也可以将它们从索引中排除。 除了为整个类编制索引外,您还可以灵活地仅为所需字段选择性地定义索引。
运行时索引可以进一步分为以下类型:
- 集团指数
- 标签索引
- 命名标签索引
集团指数
可以使用缓存对项目进行分类 团体. NCache 允许您基于组查询缓存中的数据,因为哪些组也需要索引。 当数据添加到缓存中尚不存在的组时,将为该组创建一个新索引。 然后,属于该组的任何数据都会被分配到相同的索引以进行搜索。
标签索引
一个或多个识别标记可以与高速缓存项相关联。这些识别标记称为标签。通过标签,用户可以将关键字与缓存项相关联。也可以通过指定标签来找到缓存项的集合并将其从缓存中删除。标签仅允许采用字符串格式。对于每个新标签,将在标签索引中创建一个新标签条目,并且所有相关的缓存项将与该索引关联。
命名标签索引
如果需要使用高级别的标记,其中标记可以具有不同的数据类型或名称,并且要求查询与特定类型标记相关的数据,则应使用命名标记。
“命名标签”是“标签”的增强。命名标签允许用户存储查询以字符串形式存储的对象所需的附加信息(任何类型)。例如,“最高销售时间”命名标签当任何产品在一天中销量最高时,可以存储时间值。命名标签允许在运行时根据所需属性对数据进行索引,然后可以使用命名标签构建查询来获取所需的结果集。多个命名标签可以与一个缓存项目关联,反之亦然。
当使用缓存中不存在的命名标签添加数据时,将为这个新的命名标签创建一个新索引。所有相关数据都会被分配到该索引中进行搜索。
与 Tag 不同,可以为所有基元类型、字符串和日期时间定义命名标签索引。因此,可以更灵活地添加具有不同数据类型的各种可搜索数据。
如果有多个应用程序共享同一缓存,并且所有应用程序都应添加命名标签,则请确保相同的命名标签具有同质数据类型,例如,如果一个客户端使用字符串添加命名标签“ProductID”数据类型,那么所有其他客户端应添加字符串格式的“ProductID”值,而不是同一缓存的整数或其他格式。
驱逐指数
驱逐是一个有用的功能 NCache,当缓存已满时,它决定逐出现有数据以容纳传入数据。 在这种情况下,逐出可以平滑缓存操作,同时通过删除配置的数据百分比来保持缓存大小限制。
NCache 规定了不同的驱逐政策。 这些策略决定当缓存已满时哪些数据将被逐出。 NCache 提供以下驱逐政策:
- 基于优先级的驱逐
备注
此功能也可用于 NCache Professional.
对于基于优先级的驱逐,索引按优先级从高到低的顺序保留,当缓存已满时,驱逐线程从低优先级的索引中选择键并将它们从缓存中驱逐。
- 最近最少使用 (LRU)
对于最近最少使用(LRU),逐出索引会在键的使用时间内保留,当缓存已满时,逐出线程会从索引中选择最近最少使用的键并将其从缓存中逐出。
- 最不常用 (LFU)
对于最不频繁使用(LFU),逐出索引保留了键的使用次数,当缓存已满时,逐出线程从索引中选择最不常用的键并将它们从缓存中逐出。
备注
为了执行驱逐, NCache 保留用于驱逐的缓存数据的驱逐索引。
到期指数
过期是与正在缓存的每个项目附加的属性。 该属性附加在每个对象上,以便可以根据其年龄来评估每个缓存对象,该对象的年龄将决定其过期时间。 当该过期对象失效时,关联的项目将从缓存中删除。
NCache 保持 DateTime
到期指数 用于缓存键,以便在到期时有效地删除它们。 到期管理器在 Clean Interval 之后使项目到期。
清洁间隔 是从缓存中删除过期项目的周期间隔。 可以在配置设置中更改缓存的清理间隔。
经过清理间隔后,过期管理器从索引中获取密钥,并从缓存中删除过期的项目。从缓存中删除过期项目后,过期线程将休眠缓存配置中指定的“清理间隔持续时间”。 NCache 提供了数据无效策略中解释的两种类型的过期:
- 绝对到期
- 滑动到期