何时使用新的缓存名称?

时间:2012-02-11 23:19:20

标签: java spring caching ehcache

我应该何时在Ehcache中重用缓存,何时应该创建一个新缓存?

示例1:

我有以下方法:

public Dog getBestDog(String name) {
    //Find the best dog with the provided name
}

public Dog getBestBrownDog(String name) {
    //Find the best brown dog with the provided name
}

对于给定的String(例如“rover”),这两种方法可以返回不同的Dog对象。

我应该用@Cacheable(cacheName = "dogs")注释它们还是将它们放在两个不同的缓存中,“bestDogs”和“bestBrownDogs”?

示例2:

我有以下方法:

public Dog getBestDogByName(String name) {
    //Find the best dog with the provided name
}

public Dog getBestDogByColour(String colour) {
    //Find the best dog with the provided colour
}

名称“流浪者”和颜色“狗狗颜色”可以返回相同的狗。

我应该用@Cacheable(cacheName = "dogs")注释它们还是将它们放在两个不同的缓存中,'dogsByName'和'dogsByColour'?

2 个答案:

答案 0 :(得分:3)

每当您遇到相同密钥可能导致不同结果的情况时,您可能需要单独的缓存。

示例1:

getBestDog(name) - 使用名称作为“best-dogs”缓存中的密钥

getBestBrownDog(name) - 使用名称作为“best-brown-dogs”缓存中的密钥

示例2:

getBestDogByName(name) - 与示例1相同,使用name作为“best-dogs”缓存中的密钥

getBestDogByColour(colour) - 使用颜色作为'best-dogs-by-color'缓存中的键

为您留下3个缓存,“最佳狗”,“最佳棕狗”,“最佳狗狗”

从理论上讲,你可以合并'最好的狗'和'最好的狗 - 逐个颜色'...但也许你有一只被称为'红色'的狗..所以这将是一个下落不明的边缘案例

答案 1 :(得分:3)

使用不同的缓存可以工作。您也可以使用相同的缓存,只需使用SpEL使用不同的密钥设置它们,如下所示:

@Cacheable(cacheName = "dogs", key = "'name.'+#name")
public Dog getBestDogByName(String name) {
    //Find the best dog with the provided name
}

@Cacheable(cacheName = "dogs", key = "'colour.'+#colour")
public Dog getBestDogByColour(String colour) {
    //Find the best dog with the provided colour
}