У меня есть служба, которая ищет пользователя по id
, email
или username
. Кроме того, он может обновить или удалить пользователя с помощью id
.
@Service
public class UserService{
public User getUserByEmail(String email) { ... }
public User getUserByUsername(String usern) { ... }
@Cacheable(cacheNames = "user", key = "#id")
public User getUserById(Long id) { ... }
@CachePut(cacheNames = "user", key = "#id")
public User updateUser(Long id, String name, String phone) { ... }
@CacheEvict(cacheNames = "user", key = "#id")
public User deleteUserById(Long id) { ... }
}
Реализация кэширования отлично работает с этой текущей реализацией.
Теперь, что я должен сделать, чтобы реализовать кэширование и для функций getUserByEmail
и getUserByUsername
? Поскольку все функции получения указывают на одну и ту же кеш-таблицу user
, есть ли способ сохранить кеш-таблицу с несколькими ключами (идентификатор, адрес электронной почты и имя пользователя), чтобы я мог использовать любой из ключей для получения кэшированных данных?
Если возможно, как это повлияет на мои @CachePut и @CacheEvict?