我正在向 Spring-Boot/Spring-Data 应用程序添加本地 Redis 缓存。据我所知,如果我做三件事,缓存应该可以工作:
我已经用 @Cachable 注释了我的应用程序类:
@Cacheable(cacheNames = "menuItems")
@SpringBootApplication
@ComponentScan(basePackages = { ... })
public class OpenAPI2SpringBoot implements CommandLineRunner { ... }
我已经向 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 的新手,所以它可能很小。
答案 0 :(得分:1)
问题出在您的 OpenAPI2SpringBoot
课上。你不需要 @Cacheable
注释,你需要 @EnableCaching