更新日期:
已尝试key="#p0"
,但无法正常工作
尝试用 Spring Boot 来实现Redis缓存我的产品,但我面临的问题,感谢任何帮助
java.lang.参数非法异常:缓存操作返回空键(可能您在没有调试信息的类上使用了命名参数?)
主计长
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/products")
public class ProductController {
@Autowired
ProductService productService;
@GetMapping("/")
public ResponseEntity<?> getAll() {
List<Product> products = productService.findAll();
return ResponseEntity.ok(products);
}
}
服务
@Cacheable(value = "product", key = "#productId")
public List<Product> findAll() {
return productRepository.findAll();
}
@EnableCaching注解也已放在主类中
3条答案
按热度按时间w6mmgewl1#
key
的值应该与用@Cacheable
注解的方法的一个参数findAll的名称匹配。由于findAll没有参数,因此没有任何内容可用作键。https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key
在内存中“缓存”所有乘积的一种简单方法是将第一次调用
productRepository.findAll()
的结果存储在一个示例变量中。hjzp0vay2#
要使用存储库中的
List<Product>
填充product
缓存,可以通过编程方式调用CacheManager
:j13ufse23#
key中的值必须是使用了cacheable注解的方法的参数之一。
您可以做的一件事是在调用findAll方法时传递productId的值。
这个错误仅仅意味着你使用了一个null值作为你的键,Redis不允许这样做