如何在Spring Boot中基于where子句中的多个参数从REDIS中获取数据,就像我们在JPA中获得的findBy



我有一个需求,需要用Redis替换mysql,所以我在JPA中有一个用于mysql的方法findByIdAndName。在Redis中,我存储了类似<整数,员工>(Employee是一个类,Integer是Id(所以如果我想根据Integer Id从redis中获取Employee对象,我可以很容易地使用下面提到的findById来获取这些对象,但如果我想基于EmployeeName和age来获取数据呢。

例如RedisImplementation:

public Employee findById(Integer id) {
Employee emp = redisTemplate.opsForHash().get("EMPLOYEE_HASH",Id);          
}

我想添加一个方法,可以根据ID和名称获取数据,如findByIdAndName

您应该使用@Cacheable,因为它使您能够用EL表达式定义键。

示例如下:

@Cacheable(value = "items", key = "#id")
public Item getItem(Integer id) {
Item item = itemRepository.findById(id).orElseThrow(RuntimeException::new);
logger.info("Loading data from DB {}", item);
return item;
}

我确信@Cacheable支持像POJOS这样的复合键,而不是将基元作为键。此外,如果您没有显式指定键,它将采用具有注释的方法的参数作为键。

下面是一个非常好的文档/教程https://springhow.com/spring-boot-redis-cache/

希望我能帮上忙:(

最新更新