在Spring Cache中,@Cacheable
注解用于标记一个方法,使其返回值可以被缓存。sync
属性是Spring 4.3引入的一个新特性,用于控制缓存的同步行为。
sync
属性
sync
属性的默认值是false
,表示异步缓存。如果将sync
设置为true
,则表示同步缓存。
异步缓存(sync = false
)
当sync
属性为false
时,如果多个线程同时请求同一个缓存键,并且该键在缓存中不存在,所有线程都会执行缓存方法,可能会导致缓存击穿(Cache Penetration)。
同步缓存(sync = true
)
当sync
属性为true
时,如果多个线程同时请求同一个缓存键,并且该键在缓存中不存在,只有一个线程会执行缓存方法,其他线程会等待该线程执行完毕并将结果放入缓存。这种方式可以有效防止缓存击穿。
示例
以下是一个使用@Cacheable
注解的示例,其中sync
属性设置为true
: