0

假设我们有一个配置了后写 CacheWriter 的 Cache。假设我们将一些对象放入缓存中,然后由于驱逐策略而删除了该对象。

关于写作有什么保证?更准确地说,即使它在“有机会”被写入之前被删除,是否write()保证该对象发生事件?

谢谢!

4

1 回答 1

1

不,write()不保证会发生。在后写情况下,所有写入都存储在队列中,而一些后台线程从该队列中读取以更新底层 SoR(记录系统,即:您的数据库)。该队列可以由同时读取或修改同一缓存的其他线程读取或修改。

例如,如果 aput()发生在某个键上,write()则将命令排入队列。如果在某个后台线程有机会remove()在同一个键上发生之前使用写入命令之前,则可以从队列中删除写入命令(注意此处的“可以”)。还可以进行其他类似的优化(再次“可以”),这些可以更改并且可以在任何次要版本中添加新的优化,因为这都被视为实现细节,只要 Ehcache 提供的数据遵循其一般可见性保证。

这意味着 Write-Behind,更一般地说,所有CacheWriters 都不得用于任何形式的记帐,如果这是您想到的用例的话。

于 2019-07-24T20:57:05.357 回答