【发布时间】:2012-02-15 20:08:33
【问题描述】:
我有一个将项目存储在数据库中的 Web 应用程序。 我决定使用 App Farbic Caching 来提高性能。 关于以下(或我应该决定哪些标准)的最佳模式是什么: 将每个项目分别存储在缓存中。 或者将整个列表存储在缓存中(即代表项目列表的一个键)?
非常感谢,
约瑟夫
【问题讨论】:
我有一个将项目存储在数据库中的 Web 应用程序。 我决定使用 App Farbic Caching 来提高性能。 关于以下(或我应该决定哪些标准)的最佳模式是什么: 将每个项目分别存储在缓存中。 或者将整个列表存储在缓存中(即代表项目列表的一个键)?
非常感谢,
约瑟夫
【问题讨论】:
这取决于。有几个考虑因素。 如果列表可能很大,则单个缓存键的内容可能会变得非常大(显然这可以通过启用本地缓存来缓解)。像这样对大型对象图进行序列化和反序列化会消耗客户端的时间和资源。 但是,您可能希望这样做,因为您可能在应用程序中希望在列表从缓存中反序列化后执行 linq to objects 查询。
如果您对列表执行的查询定义明确,您可以在不同的缓存键下缓存列表的多种风格 - 您可以使用 PeopleMale 而不是 people 、PeopleFemale、PeopleAmerican、PeopleIrish、PeopleFrench 等。 如果您这样做,您可能会在多个缓存人员列表下出现同一个人,您必须对此进行管理。 例如,我有一个拥有美国和爱尔兰双重国籍的女性。如果我编辑该人,使性别从女性变为 make 并将公民身份更改为荷兰语,则有必要确保四个键无效 PeopleMale、PeopleFemale、 美国人民,爱尔兰人民。
我上面给出的示例可能难以管理 - 是否值得真正取决于您的具体用例。
一般来说,如果可能,我建议您只使用包含相对非易失性参考数据(国家、状态类型、国籍等)列表的缓存键。
希望这会有所帮助。
【讨论】: