为什么我的 Redis 缓存在 Spring-Boot/Spring-Data 应用程序中不起作用?

时间:2021-01-17 11:32:28

标签: java spring-boot redis spring-data

我正在向 Spring-Boot/Spring-Data 应用程序添加本地 Redis 缓存。据我所知,如果我做三件事,缓存应该可以工作:

  1. 我已经用 @Cachable 注释了我的应用程序类:

    @Cacheable(cacheNames = "menuItems")
    @SpringBootApplication
    @ComponentScan(basePackages = { ... })
    public class OpenAPI2SpringBoot implements CommandLineRunner { ... }
    
  2. 我已经向 application.properties 添加了属性:

    #Redis cache
    spring.cache.type=redis
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    

我在包装类中注释了我的存储库调用

@Component
public class MenuItemRepository {
  static final String MENU_ITEM_CACHE = "menuItems";
  // this is declared like this:
  // class MenuItemUncachedRepository extends JpaRepository<MenuItem, Integer>
  private final MenuItemUncachedRepository menuItemRepository; // actual repo.
  
  @Autowired
  public MenuItemRepository(MenuItemUncachedRepository repository) {
    menuItemRepository = repository;
  }
  
  public MenuItem findOne(Integer id) {
    return menuItemRepository.findOne(id);
  }
  
  @Cacheable(cacheNames = MENU_ITEM_CACHE, key = "all")
  public List<MenuItem> findAll() {
    return menuItemRepository.findAll();
  }

  @CacheEvict(cacheNames = MenuItemRepository.MENU_ITEM_CACHE)
  public <M extends MenuItem> M save(M menuItem) {
    return menuItemRepository.save(menuItem);
  }
}

我的实际存储库不是公开的,因此所有调用都需要通过带注释的包装类。日志记录确认正在调用带注释的方法。

所以我像这样启动了我的缓存监视器:redis-cli MONITOR 我正在从应用程序获取数据,所以我知道存储库可以工作。当我执行 findAll() 方法时,我应该看到我的值在监视器中设置,但没有任何反应。我是 Redis 的新手,所以它可能很小。

1 个答案:

答案 0 :(得分:1)

问题出在您的 OpenAPI2SpringBoot 课上。你不需要 @Cacheable 注释,你需要 @EnableCaching