gpt4 book ai didi

asp.net - ASP.NET 缓存问题

转载 作者:行者123 更新时间:2023-12-02 12:12:08 26 4
gpt4 key购买 nike

我的缓存中有两项

  1. 键:猫
  2. 键:Animal_Vacinations

现在,Animal_VacinationsCat 具有基于 key 的缓存依赖项。因此,如果缓存项 Cat 发生任何更改,则缓存项 Animal_Vacinations 就会失效。完美:)

好的..现在解决问题。

创建第二个缓存项(即Animal_Vacinations)后,我添加一个第三个​​缓存对象:-

  • 关键:狗
  • 问题是,第二个对象也需要依赖于 Dog 。在创建第二个对象时,它知道它应该依赖哪些项目。因此,在此示例中,Animal_Vacination 对象知道它应该依赖于...

    1. 乔恩·斯基特

    问题是,如果我尝试将 Animal_Vacination 对象与所​​有这 4 个依赖项一起插入到缓存中,则会失败。没有错误,只是失败。 (即Cache["Animal_Vacination"] == null)。

    原因是,当我插入具有这 4 个依赖项的缓存对象时...但是其中 1 个或多个依赖项不_存在_...它会正常失败。

    无赖。

    因为在上面的示例中,在添加 2 个对象后立即添加了缺少的三个对象之一。

    那么……有没有办法将一个对象添加到缓存中,并具有基于键的缓存依赖项,其中 1 个或多个依赖项尚未创建,但稍后可能会创建?

    最佳答案

    我不愿意称其为答案,因为它做出了许多假设,这些假设可能应该首先通过其他问题来澄清,但这里是。

    假设有一段代码负责使用键“Animal_Vacinations”向缓存添加某些内容,并且该代码知道“Animal_Vacinations”项依赖于它的其他缓存项,那么该代码应该创建每个必要的缓存键依赖项,包括将 Null 对象添加到缓存(如有必要),以查找尚未在其中找到的任何依赖项。

    因此,例如,在您给出的示例中,在添加“Animal_Vacinations”之前,缓存中已经存在“Cat”,那么负责将“Animal_Vacinations”添加到缓存的逻辑应该检查缓存是否存在每个从属项目的,即“猫”、“狗”、“鸟”、“Jon Skeet”;当未找到时,应将占位符对象或装箱值(可能是空字符串)添加到该键的缓存中(在本例中为“Dog”、“Bird”和“Jon Skeet”);一旦所有依赖项都存在于缓存中,则创建缓存依赖项并将“Animal_Vacinations”添加到缓存中。 (或者,为每个所需的依赖键使用占位符对象调用 Cache.Add,而不首先使用 Get 检查它们是否存在,并使用异常处理程序吞掉抛出的异常(如果已存在)。)

    继续您的示例,当在此事件之后,使用“Dog”键将真实的东西添加到缓存中时,使用 Insert 而不是 Add 来考虑该键已经存在的可能性(就像在本例中所做的那样)例如),那么替换“Dog”缓存项(这只是一个 Null 值)将根据其缓存依赖项触发“Animal_Vacinations”缓存项的失效。

    关于asp.net - ASP.NET 缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/862096/

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