Ehcache & MultiThreading

2022-09-03 14:42:06

ehcache 是否默认支持多线程,或者是否需要进行任何配置更改?在使用Ehcache对我的应用程序进行多线程处理时,我发现数据库命中计数实际上正在增加,即尽管我的缓存都是单例,但没有可用于所有线程的全局缓存。有什么建议吗?


答案 1

这可能有助于回答您的问题,从常见问题解答:

从缓存中检索后修改元素值是否线程安全?

请记住,缓存元素中的值可从多个线程全局访问。修改该值本质上是非线程安全的。更安全的做法是检索值,删除缓存元素,然后重新插入该值。

(着重号由我补充)


答案 2

官方文档中可以看出,它是专门构建和测试的,可以在高度并发访问下正常运行,只要您不从多个线程进行修改即可。Element

但是,当然,这并不意味着使用 Ehcache 可以使代码线程的其他部分安全。如果从多个线程(使用相同的键)获取相同的值,则该实例可能是共享的,您需要在修改它之前知道您正在做什么。Best似乎使用不可变对象(如字符串)作为缓存值。