gpt4 book ai didi

nhibernate - Strict vs NonStrict NHibernate 缓存并发策略

转载 作者:行者123 更新时间:2023-12-03 23:31:31 28 4
gpt4 key购买 nike

这个问题是关于NHibernate二级缓存的ReadWrite和NonStrictReadWrite缓存并发策略的区别。

据我了解,当您拥有分布式复制缓存时,这两种策略之间的区别是相关的 - nonstrict 不会保证一个缓存与另一个缓存具有完全相同的值,而严格的读/写应该 - 假设缓存提供程序确实如此适当的分布式锁定。

我不明白的部分是,当您拥有单个缓存或分布式分区(非复制)缓存时,严格与非严格区别有何相关性。它可以相关吗?在我看来,在非复制场景中,时间戳缓存将确保不提供过时的结果。如果它可以是相关的,我想看一个例子。

最佳答案

您认为是对的,在单个目标/线程环境中几乎没有区别。但是,如果您查看缓存提供程序,即使在多线程场景中也会发生一些事情。

一个对象如何从它的修改状态重新缓存在非严格中是不同的。例如,如果您的对象要重新加载更重,但您希望在更新后重新加载而不是为下一个用户支付账单,那么您将看到严格与非严格的不同性能。例如:非严格只是在执行更新后从缓存中转储一个对象...价格是为下次访问而不是更新后事件处理程序的获取支付的。在严格模型中,重新缓存是自动处理的。插入也会发生类似的事情,非严格将不执行任何操作,而严格将落后并将新插入的对象加载到缓存中。

在非严格中,您也有可能发生脏读,因为在读取时缓存未锁定,您将看不到另一个线程对该项目进行更改的结果。严格来说,该项目的缓存键将被锁定,您将被阻止,但会看到绝对最新的结果。

因此,即使在单个目标环境中,如果对象上存在大量并发读取/编辑,那么您就有机会看到不准确的数据。

当执行保存并且正在加载编辑屏幕时,这当然会成为一个问题:认为他们正在编辑对象的最新版本的人确实不是,并且当他们尝试保存时会遇到令人讨厌的惊喜对他们加载的陈旧数据的编辑。

关于nhibernate - Strict vs NonStrict NHibernate 缓存并发策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/109179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com