Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET缓存存在问题_Asp.net_Caching_Cache Dependency - Fatal编程技术网

ASP.NET缓存存在问题

ASP.NET缓存存在问题,asp.net,caching,cache-dependency,Asp.net,Caching,Cache Dependency,我的缓存中有两个项目 钥匙:猫 关键词:动物免疫 现在,Animal_-vacination对Cat具有基于密钥的缓存依赖性。因此,如果缓存项Cat发生任何更改,则缓存项Animal_-vacination将失效。完美:) 好的。。现在来谈谈问题 在我创建第二个缓存项(即动物接种)后,我添加了第三个缓存对象:- 钥匙:狗 问题是,第二个对象也需要依赖于Dog。在创建第二个对象时,它知道应该依赖哪些项。所以在这个例子中,动物免疫对象知道它应该依赖于 猫 狗 鸟 乔恩·斯基特 问题是,如果我尝试将A

我的缓存中有两个项目

  • 钥匙:猫
  • 关键词:动物免疫
  • 现在,
    Animal_-vacination
    Cat
    具有基于密钥的缓存依赖性。因此,如果缓存项
    Cat
    发生任何更改,则缓存项
    Animal_-vacination
    将失效。完美:)

    好的。。现在来谈谈问题

    在我创建第二个缓存项(即
    动物接种
    )后,我添加了第三个缓存对象:-

  • 钥匙:狗
  • 问题是,第二个对象也需要依赖于
    Dog
    。在创建第二个对象时,它知道应该依赖哪些项。所以在这个例子中,动物免疫对象知道它应该依赖于

  • 乔恩·斯基特
  • 问题是,如果我尝试将
    Animal_-Vacination
    对象与所有这4个依赖项一起插入缓存,它就会失败。没有错误,只是失败了。(即,
    缓存[“动物免疫”]==null

    原因是,当我插入具有这4个依赖项的缓存对象时。。。但其中一个或多个依赖项不存在。。。它优雅地失败了。

    糟糕透了

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


    所以。。。是否可以使用基于键的缓存依赖项将对象添加到缓存中,其中一个或多个依赖项尚未创建,但以后可能会创建?

    您可以在添加实际项目后添加依赖项。所以它是这样的:
    添加按键猫
    添加关键动物疫苗
    为动物接种添加缓存依赖性
    添加按键狗
    编辑动物接种的缓存依赖项,使其包含狗
    添加键鸟
    编辑动物疫苗的缓存依赖项,使其包含鸟,

    诸如此类……

    我不愿意把这称为一个答案,因为它提出了一些假设,这些假设可能应该首先用其他问题加以澄清,但接下来是

    假设某个地方有一段代码负责向缓存中添加具有“Animal_-Vacinations”键的内容,并且该代码知道“Animal_-Vacinations”项所依赖的其他缓存项,那么该代码应该创建每个必要的缓存键依赖项,包括向缓存中添加空对象,如有必要,对于尚未在其中找到的任何依赖项

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


    继续您的示例,在该活动之后,使用“Dog”键将真实的某物添加到缓存中,使用Insert而不是Add来说明该键已经存在的可能性(如本例所示),然后替换“Dog”缓存项,该缓存项只是一个空值,将触发每个缓存依赖项的“动物免疫”缓存项失效。

    但您将如何做到这一点?一只狗或一只鸟怎么知道告诉动物们在它刚刚添加的东西上添加一个依赖项呢?喷射!!!!!!!!!!棒极了,伙计!我要试一试。这是一个很酷的解决方案!这很有意义。现在,动物知道它必须依赖什么。必须这样做。因此,我正在检查缓存项是否存在,如果存在,则添加依赖项。它从不关心依赖项的内容,只关心它的存在。因此,如果缓存项不存在,我将创建它。加载真实数据时,它将覆盖假内容。依赖性仍然存在。令人敬畏的酱汁。一旦我完成了,我会发回信息。确认。工作。你真漂亮!