Spring MVC - Ehcache 最佳实践
Spring MVC - Ehcache best practices
我对使用 spring 和 ehCache 的最佳实践有疑问。
例如,如果我有两个使用相同参数值的 @Cacheable 注释的方法,ehcache 将 return 最新的缓存值。
@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 将 return 相同的值两种方法,因为它们具有相同的密钥。
我认为 ehcache 使用 键和方法名称 索引缓存值,因此如果两个方法具有相同的#key(在我的示例中为 10),它将查看方法名称。
我知道最简单的解决方案是创建两个缓存("userImagesCache" 和 "productImagesCache"),但在这种情况下我想避免这种情况。
如何解决?
谢谢。
根据 @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 }
我对使用 spring 和 ehCache 的最佳实践有疑问。
例如,如果我有两个使用相同参数值的 @Cacheable 注释的方法,ehcache 将 return 最新的缓存值。
@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 将 return 相同的值两种方法,因为它们具有相同的密钥。 我认为 ehcache 使用 键和方法名称 索引缓存值,因此如果两个方法具有相同的#key(在我的示例中为 10),它将查看方法名称。
我知道最简单的解决方案是创建两个缓存("userImagesCache" 和 "productImagesCache"),但在这种情况下我想避免这种情况。
如何解决?
谢谢。
根据 @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 }