如何避免循环缓存失效无限循环


How to avoid circular cache invalidation infinite-loop

让我们假设我们有一个这样结构的应用程序:

Client
--ClientUser
----Questionnaire
------Question

我们正在缓存这些项目中的每一个。如果我使其中一个项目无效,它需要向上和向下传播。因为添加新问题后,调查表的questionCount将被废弃。此外,更改客户端名称后,缓存的ClientUser对象中的客户端数组将被废弃。

因此,每个无效代码都必须调用其父级和子级的无效代码。但是,在使一个问题无效后,它会向上传播并使客户端也无效。但是客户端无效代码也会向下传播,这种情况会一直持续下去。

我该如何避免这种情况?

根据循环是否可行,有两种方法。

  1. 永远不要将无效消息传播回您获取它的对象。

  2. 让一个对象与正在进行的无效操作关联,并让它跟踪每个已经无效的对象。被无效的对象必须要求此对象为其使其他对象无效,并且它不会使已经作为此无效的一部分而无效的对象无效。