我有一个获取所有数据的方法,我正在缓存该方法的结果,但我无法逐出结果。
@Component("cacheKeyGenerator")
public class CacheKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
final List<Object> key = new ArrayList<>();
key.add(method.getDeclaringClass().getName());
return key;
}
}
CachedMethod: -
@Override
@Cacheable(value="appCache",keyGenerator="cacheKeyGenerator")
public List<Contact> showAllContacts() {
return contactRepository.findAll();
}
@Override
@CachePut(value="appCache",key="#result.id")
public Contact addData(Contact contact) {
return contactRepository.save(contact);
}
现在,当调用addData时,我想要将带有key =“cacheKeyGenerator”的缓存“appCache”中的数据逐出。所以方法“showAllContacts()”返回的数据是准确的。任何人都可以帮忙!
找到整个代码答案 0 :(得分:0)
假设您有showAllContacts
的已知常量缓存键,那么解决方案应该只是在@CacheEvict
上添加addData
,并传入缓存名称和键值:
@Override
@Caching(
put = {@CachePut(value="appCache", key="#result.id")},
evict = {@CacheEvict(cacheNames="appCache", key="someConstant")}
)
public Contact addData(Contact contact) {
return contactRepository.save(contact);
}
但是因为你使用密钥生成器,所以它涉及更多。现在给出密钥生成器的功能,您可以为该缓存密钥选择一个值,确保不会与#result.id
中的值发生任何冲突,并使用该值而不是返回的密钥生成器之一。