Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
Caching 基于密钥的缓存过期_Caching - Fatal编程技术网

Caching 基于密钥的缓存过期

Caching 基于密钥的缓存过期,caching,Caching,我想讨论一下37signals博客上名为。我是Django开发者,不是RoR,所以这里是Ross Poulton的Django“翻译”: 如你们所见,主要思想如下:我们有“俄罗斯玩偶”结构,其中一个对象包含多个层次的其他对象 class A: timestamp updated_at; class B: A parent; timestamp updated_at; class C: B parent; timestamp updated_at; 类A对象的视图(例如H

我想讨论一下37signals博客上名为。我是Django开发者,不是RoR,所以这里是Ross Poulton的Django“翻译”:

如你们所见,主要思想如下:我们有“俄罗斯玩偶”结构,其中一个对象包含多个层次的其他对象

class A:
  timestamp updated_at;

class B:
  A parent;
  timestamp updated_at;

class C:
  B parent;
  timestamp updated_at;
类A对象的视图(例如HTML)与所有相关对象一起缓存。更新C类时,我们需要:

  • 用C语言更新时间戳
  • 在B中更新时间戳
  • 更新A中的时间戳
  • 在此之后,当我们访问A类视图时,我们需要:

  • 进行选择以从A获取时间戳
  • 检查是否没有具有此时间戳的缓存对象,因此 需要重新设置它
  • 进行选择以获取数据
  • 进行选择以从B获取所有时间戳
  • 获取缓存中存在的B
  • 进行选择以获取缓存中不存在的Bs
  • 进行选择以获取与不存在的Bs相关的Cs的所有时间戳 存在于缓存中
  • 从缓存中获取Cs(如果存在)
  • 进行选择以获取缓存中不存在的Cs
  • 所以,如果我正确理解这个策略,我们需要为每个对象对DB-2执行6个查询:一个将得到时间戳,第二个对象,缓存中的过期对象

    相反,如果我们将重置所有数据,我们只需要进行3次查询:

  • 获取对象A
  • 获取相关对象B
  • 获取相关对象C
  • 据我所知,执行3个数据较多的查询通常比执行6个数据较少的查询更好。那么这个策略有效吗

    当然,我们也可以在缓存中存储时间戳,但在这种情况下,我们将面临时间戳无效的问题。所以,为避免无效化所需的策略而使数据无效是没有意义的


    如果我对该算法的作用域或工作原理理解错误,请纠正我。

    我最近在Java中构建了类似的东西。在您的示例中,A、B和C是缓存键还是缓存对象?@arootbeer,它是类。这些类的所有实例都是可缓存的。如果我正确理解了这个问题,您实际上是在问“当缓存未命中时,此策略是否会使加载条目的成本更高?”这是一个有效的问题,但我认为它忽略了缓存的要点:如果您做得正确,您的未命中非常罕见,因此更昂贵的加载过程会被执行许多缓存查找的成本所抵消。如果我的理解是正确的,请告诉我,我会给出一个更全面的答案。@arootbeer,我认为,这种缓存策略在一种情况下是有意义的,但在另一种情况下是没有意义的。例如,如果我们有一个简单的对象,其中包含另一个,那么它似乎没有意义。所以我的问题是什么时候。在我看来,只有当我们有“俄罗斯玩偶”结构,每个层次上都有许多层次和对象,并且有多个缓存片段表示一个父对象或子对象时,才会出现这种情况。我试着去理解,这种策略对我有什么帮助。此外,DB涉及到每个请求都让我感到困惑。我现在明白了。我将不得不做更多的挖掘,看看它到底在做什么,但无论如何,当我试图学习RoR时,它应该是一个有用的练习。