带有雷迪斯的春季靴子



我使用弹簧引导和 redis 进行缓存。我可以缓存从数据库(oracle(获取的数据使用@Cacheable(key = "{#input,#page,#size}",value = "on_test")。 当我尝试使用 redisTemplate 从key("on_test::0,0,10")获取数据时,结果为 0 为什么??

红地思配置:

@Configuration
public class RedisConfig {
@Bean
JedisConnectionFactory jedisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
redisStandaloneConfiguration.setPassword(RedisPassword.of("admin@123"));
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisTemplate<String,Objects> redisTemplate() {
RedisTemplate<String,Objects> template = new RedisTemplate<>();
template.setStringSerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
//service
@Override
@Cacheable(key = "{#input,#page,#size}",value = "on_test")
public Page<?> getAllByZikaConfirmedClinicIs(Integer input,int page,int size) {
try {
Pageable newPage = PageRequest.of(page, size);
String fromCache = controlledCacheService.getFromCache();
if (fromCache == null && input!=null) {
log.info("cache is empty lets initials it!!!");
Page<DataSet> all = dataSetRepository.getAllByZikaConfirmedClinicIs(input,newPage);
List<DataSet> d = redisTemplate.opsForHash().values("on_test::0,0,10");
System.out.print(d);
return all;
}
return null;

使用@Cacheable的全部意义在于您不需要直接使用RedisTemplate。你只需要调用getAllByZikaConfirmedClinicIs()(从定义它的类之外(,Spring 就会首先自动检查缓存的结果是否可用并返回它而不是调用函数。

如果这不起作用,您是否使用@EnableCaching注释了 Spring Boot 配置类之一以启用缓存?

您可能还需要在application.properties中设置spring.cache.type=REDIS,或在application.yml中设置spring.cache.type: REDIS,以确保 Spring 使用的是 Redis 而不是其他缓存提供程序。

最新更新