我有一个关于使用spring和ehCache的最佳实践的问题。
例如,如果我有两个使用@Cacheable注释的方法使用相同的参数值,ehcache将返回最新的缓存值。
@Cacheable(value="imagesCache",key="#id_image")
public Image getUserImage(id_image){ //stuff }
//and
@Cacheable(value="imagesCache",key="#id_image")
public Image getProductImage(id_image){ //stuff }
如果我首先调用getUserImage( 10 )然后调用getProductImage( 10 ),则ehcache将为两个方法返回相同的值,因为它们具有相同的键。 我使用了键和方法名对ehcache进行了索引,因此,如果两个方法具有相同的#key(在我的示例中为10),它将查看方法名称。
我知道最简单的解决方案是创建两个缓存(“userImagesCache”和“productImagesCache”),但在这种情况下我想避免这种情况。
如何解决这个问题?
谢谢。
答案 0 :(得分:4)
根据@Cacheable
javadoc key
是一个SpEL表达式,所以你可以这样做:
@Cacheable(value="imagesCache",key="'user' + #id_image")
public Image getUserImage(id_image){ //stuff }
//and
@Cacheable(value="imagesCache",key="'product' + #id_image")
public Image getProductImage(id_image){ //stuff }