我在 Springboot 中使用 JSR107 缓存。我有以下方法。
@CacheResult(cacheName = "books.byidAndCat")
public List<Book> getAllBooks(@CacheKey final String bookId, @CacheKey final BookCategory bookCat) {
return <<Make API calls and get actual books>>
}
第一次进行实际的 API 调用,第二次加载缓存没有问题。我可以看到日志的以下部分。
Computed cache key SimpleKey [cb5bf774-24b4-41e5-b45c-2dd377493445,LT] for operation CacheResultOperation[CacheMethodDetails ...
但问题是我想加载缓存而不进行第一次 API 调用,只需要像下面这样填充缓存。
String cacheKey = SimpleKeyGenerator.generateKey(bookId, bookCategory).toString();
cacheManager.getCache("books.byidAndCat").put(cacheKey, deviceList);
当我检查时,缓存键的哈希码在两种情况下都是相同的,但它正在进行 API 调用。如果两种情况下的哈希码相同,为什么不考虑缓存就进行 API 调用?
在调试 spring 类时发现,org.springframework.cache.interceptor.SimpleKeyGenerator 与缓存键生成一起使用,即使 @CacheResult 在那里。 编辑并增强问题:
除此之外,如果 getAllBooks 具有重载方法,然后通过单独的重载方法调用此缓存方法,在这种情况下,方法缓存也不起作用。