我有一个Sping Boot 应用程序,它正在缓存一些值,例如<UserId,MyPojo.class>。示例MyPojo字段:
如果对MyPojo.code进行了更改,那么我希望为所有拥有该MyPojo.id的用户该高速缓存。我已经看过带条件的@CacheEvict注解,但这似乎只是为了决定是否在某些条件下驱逐缓存,而不检查该高速缓存本身中存在什么。另一种选择是遍历每个缓存条目,检查值并清除该键,但这似乎代价很高。有什么建议吗?
@CacheEvict
yptwkmov1#
切换键/值,你的生活会更轻松;)当您对在该高速缓存中作为值存储的对象进行更改时,有两种方法可以仅清除相关的缓存对象:
1条答案
按热度按时间yptwkmov1#
切换键/值,你的生活会更轻松;)
当您对在该高速缓存中作为值存储的对象进行更改时,有两种方法可以仅清除相关的缓存对象:
1.使用cache.getNativeCache()获取本地缓存实现,然后循环遍历此缓存的条目,并检查<cached MyPojo's id> == <modified MyPojo's id>。如果是,则将其从缓存中逐出。这将取决于你的缓存实现,所以看看如何为Redis做到这一点。
如果我是你,我会切换到使用MyPojo.id作为键,并存储一些List作为缓存值。然后,如果您对MyPojo进行更改,您可以简单地从该高速缓存中驱逐该id。