Какое значение ключа в кеше заполняется через @Cachable
У меня есть кеш, который заполняется через @Cacheable следующим образом
@Cacheable(value = "accountGroupCache")
public List<Acc> getAccInfo(int groupId, String user)
Я хотел бы знать, что будет пара ключ-значение для этого кэша? Я использую Ehcahe для кэширования.
1 ответ
Ключ будет основан на параметрах вашего getAccInfo()
метод. Значение будет List<Acc>
возвращается по вашему методу.
Согласно документам:
28.3.1.1 Генерация ключей по умолчанию
Поскольку кеши по сути являются хранилищами значений ключей, каждый вызов кэшированного метода необходимо преобразовать в подходящий ключ для доступа к кешу. Изначально абстракция кэширования использует простой KeyGenerator, основанный на следующем алгоритме:
- Если параметры не указаны, вернуть 0.
- Если указан только один параметр, верните этот экземпляр.
- Если задано больше одного параметра, вернуть ключ, вычисленный из хэшей всех параметров.
Глядя на исходный код DefaultKeyGenerator, вот как он вычисляет "ключ, вычисленный из хэшей всех параметров":
int hashCode = 17;
for (Object object : params) {
hashCode = 31 * hashCode +
(object == null ? NULL_PARAM_KEY : object.hashCode());
}