gpt4 book ai didi

c# - 大型 asp.net 缓存存储持久化方法的效率

转载 作者:太空狗 更新时间:2023-10-29 21:11:35 25 4
gpt4 key购买 nike

想知道是否有人对哪种方法更适合 asp.net 缓存有意见。选项一,缓存中的项目越少越复杂,或者项目越多越不复杂。

为了便于讨论,让我们假设我的站点有 SalesPerson 和 Customer 对象。这些是非常简单的类,但我不想与数据库闲聊,所以我想将它们延迟加载到缓存中,并在我进行更改时使它们从缓存中失效——足够简单。

选项 1创建字典并缓存整个字典。当我需要从缓存中加载 SalesPerson 的实例时,我会取出 Dictionary 并针对 Dictionary 执行正常的键查找。

选项 2为每一项的key加上前缀,直接存放在asp.net缓存中。例如,缓存中的每个 SalesPerson 实例都将使用该对象的前缀和键的组合,因此它可能看起来像 sp_[guid] 并存储在 asp.net 缓存中,缓存中还有带有像 cust_[guid] 这样的键。

我对选项二的担心之一是条目的数量会变得非常大,在 SalesPerson、Customer 和十几个其他类别之间,我可能在缓存中有 25K 个项目,并且高度重复查找类似字符串资源的东西我在几个地方使用可能会付出代价,而代码会查看缓存的 key 集合以在其他 25K 中找到它。

我确信在某些时候,在缓存中存储过多的项目会导致 yield 递减,但我很好奇对这些问题的看法。

最佳答案

最好在缓存中创建许多较小的项目,而不是创建较少但较大的项目。这是推理:

1) 如果你的数据很小,那么缓存中的项目数量会相对较少,这不会有任何区别。从缓存中获取单个实体比获取字典然后再从该字典中获取项目更容易。

2) 一旦您的数据变大,可以使用缓存以智能方式管理数据。 HttpRuntime.Cache 对象使用最近最少使用 (LRU) 算法来确定缓存中的哪些项目将过期。如果缓存中只有少量高使用率的项目,则此算法将无用。但是,如果缓存中有许多较小的项目,但其中 90% 的项目在任何给定时刻都没有被使用(非常常见的启发式用法),那么 LRU 算法可以确保那些正在使用的项目保留在缓存中同时驱逐不常用的元素,以确保为用过的元素留出足够的空间。

随着应用程序的增长,能够管理缓存中内容的重要性将变得尤为重要。此外,我还没有看到缓存中有数百万个键会导致性能下降——哈希表非常快,如果您发现问题,很可能很容易通过更改缓存键的命名约定来优化它们以用作哈希表键。

关于c# - 大型 asp.net 缓存存储持久化方法的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/415309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com