Umbraco 缓存结构的差异?

Differences in Umbraco cache structure?

好的,所以我刚刚在 Umbraco 的杂草中度过了过去的 6-8 周,并对我们的网站和环境做了一些 fixes/Improvements。我花了很多时间尝试纠正较低级别的 Umbraco 缓存相关问题。现在反思我的经验,我仍然不知道以下概念之间的差异是什么:

再次感谢,

德文

检查索引是umbraco内容的索引

所以当你create/update/delete内容时,当前内容信息将被索引

此索引用于搜索 - 在后台,它是 lucene 索引 Umbraco 后端使用这些索引进行搜索

如果需要,您可以创建自己的索引

查看更多信息,Overview & Explanation - "Examining Examine by Peter Gregory"

umbraco.config和内存中缓存xml其实是一回事。

前端 UmbracoHelper api 从缓存中获取内容而不是数据库 - 缓存来自 umbraco.config

CMSContentXML 包含每个内容的信息 xml

所以本质上这个xml代表了一个节点内容的所有信息

简而言之,它们代表了三件事:

  1. examine 用于搜索
  2. umbraco.config 缓存数据 - 保存到数据库的往返行程
  3. CMSContentXML 存储内容的完整信息

编辑以包括 Robert Foster 评论和 UmbracoHelper 与 ExamineManager 的更好说明

对于 umbraco.config 和 CMSContentXML table,@robert-foster 评论

umbraco.config stores the most recent version of all published content only; the in-memory cache is a cached version of this file; and the cmscontentxml table stores a representation of all content and is used primarily for preview mode - it is updated every time a content item is saved. IIRC it also stores a representation of other content types

问候 UmbracoHelper 与 ExamineManager

UmbracoHelper api 主要从内存缓存中获取它的内容 - IMO 它在定位直接内容时效果最好,例如当你知道你想要的内容的 id 时,你只需调用 Umbraco.TypedContent(id)

但是你首先从哪里获得你想要的 ID?或者换句话说,如果你想找到所有内容的 属性 标题中包含单词 "Test",那么你将使用 Examine 来搜索它。因为 Examine 是真正的 lucene 包装器,所以它会快速高效

虽然可以通过Umbraco.TypedContent(id).Children等方法遍历树然后使用linq过滤结果,但我认为这是在内存中使用linq-to-object完成的,所以效率和优先级都不高作为 lucene

所以我个人认为:

  1. 在搜索(定位)内容时使用 Examine - 因为您可以使用适当的搜索引擎 lucene 的功能
  2. 从搜索结果中获得 ID 后,使用 UmbracoHelper 将内容 ID 的完整发布内容表示形式获取到强类型模型中并使用数据。

@robert-foster 在评论中提到的一件事,我不知道的是 UmbracoHelper 提供了搜索方法,它是检查的包装器,所以如果更熟悉 api .

最后,如果上面的说法有错误或者不太正确的地方,请帮我澄清一下,以免大家以后看错了,谢谢大家。