Cacheable 注解中的同步参数如何工作?

问题描述 投票:0回答:1

Spring 中的

@Cacheable
注解在第一次调用时运行该方法,然后缓存结果。 供将来参考,它实际上并不运行该方法,只是返回缓存的结果。

同步参数表示:

如果有多个线程,则同步底层方法的调用 正在尝试加载同一个键的值。

所以我的问题是何时应用此同步?是否仅在第一次调用期间,因为此后该方法实际上并未被调用?为什么

@Cacheable
同步而
@CachePut
不同步?

@Cacheable
@CachePut
之间的区别在于
@Cacheable
将跳过运行该方法,而
@CachePut
将实际运行 方法,然后将其结果放入缓存中。

将同步与实际运行该方法并更新缓存的注释一起使用更有意义,即

@CachePut
。既然
@Cacheable
无法更新缓存中现有的条目,为什么我们需要同步?我在这里缺少什么?幕后发生的过程是什么?

java spring caching synchronization
1个回答
0
投票

@Cacheable
注释中的sync属性管理当多个线程尝试同时访问同一缓存键时如何同步缓存操作。

  • when
    sync = true
    :如果多个线程请求相同的缓存键 尚未缓存,只有一个线程会执行该方法 加载缓存。其他线程等待直到缓存被填充并且 然后返回缓存的结果。这确保了缓存仅被加载 对于该密钥一次,避免冗余执行。
  • sync = false
    (默认):多个线程可以访问 方法并在缓存为空时同时计算值。 这可能会导致同一键的重复执行,当多个 线程同时请求未缓存的值。
© www.soinside.com 2019 - 2024. All rights reserved.