管理缓存失效

sup*_*er9 16 caching

只是想知道你们如何管理缓存失效.鉴于缓存中可能存在可能由不同算法或规则触发的对象(数百和数千).你如何跟踪这一切?

无论如何,您是否可以从数据库中的表中引用关系并以某种方式强制执行它?

请耐心等待,因为我以前从未做过任何缓存.

Nic*_*las 12

缓存层的目的应该是:反映数据库中的相应数据,但提供的速度比数据库快,或至少提供它而不保持数据库繁忙.

要实现这一目标,您有两种解决方案:

  1. 知道存储在缓存中的所有内容的确切生命周期
  2. 使您的缓存与数据库保持同步

第一种非常罕见,但很容易处理:只需定期更新缓存.

第二点是您最有可能在项目中处理的内容:只需在更新数据库时更新缓存.这比你想象的要简单:

  • 在成功将新对象添加到数据库后,立即将新对象添加到缓存中.
  • 在数据库中成功更新对象后立即更新缓存中的对象.
  • 在数据库中成功删除对象后,立即从缓存中删除该对象.

如果您的代码足够干净,那么应该很容易在其上实现有效的缓存策略.关于缓存以及如何在我之前发布的答案中做得更好.希望这一切都会帮助你:)


小智 10

正如您似乎已经解决的那样,它并不像新闻报道更新时更新新闻报道的缓存那么简单.还有其他关系,例如,您需要更新的最新新闻报道列表.

最简单的方法是关联所有相关的对象.我之前使用过缓存组的概念.继续我的新闻示例,在缓存组 '新闻'中将是; 新闻报道,各种新闻报道列表以及其他包含新闻报道的内容.

当我编辑新闻报道时,系统会识别出需要更新缓存组 "新闻"并完成以下过程...

  1. 在保存更新之前获取每个对象
  2. 保存
  3. 再次获取对象,如果它是不同的更新,各种缓存

当然,这是一个非常简单的例子.更简洁的方法是编写代码以始终保持对象在缓存中的位置.

如果您在新闻文章中添加标签,您的代码可以将这些更改写入数据库,但如果您更新新闻文章对象和相关标签对象,这两个对象都可以"知道"它们已经更改(就像设置一样简单hasChanged = true)然后,您可以更新缓存并自动保存到数据库.

  • 缓存组为+1.在过去的几个小时里,我一直在互联网上寻找如何处理缓存失效的想法,这是我第一次看到这一点. (2认同)