gpt4 book ai didi

java - 如何部分更新spring缓存(仅一个字段)?(当对象发生变化时)

转载 作者:行者123 更新时间:2023-12-01 10:17:11 25 4
gpt4 key购买 nike

假设我有一种方法可以更新所有实体的一个字段。

public void makeAllCarsRed(){...}

我知道Spring提供了3个注解来管理缓存:

  1. @Cacheable - 尝试在缓存中查找值。如果找不到 - 执行方法并添加到缓存;
  2. @CachEvict - 只需按条件从缓存中删除对象;
  3. @CachPut - 将新值放入缓存

我没有找到适合我的情况应用这些注释的方法。

附注

我认为使所有缓存无效的成本太高

最佳答案

Spring 缓存整个实体,而不是单个字段。因此您无法从缓存中逐出字段。

如果您想从缓存中逐出实体,也会遇到问题,但这是可以解决的:

在您的方法之外,它是不可见的,哪些实体会更新,因此您不能使用任何这些注释。

您可以做的是将 CacheManager 注入(inject)到拥有方法 makeAllCarsRed() 的类中,然后为所有更新的实体手动更新缓存:

在你的配置中

@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("cacheName");
}

具有 makeAllCarsRed() 的类:

public class MakeAllCarsRedService{
@Autowired CacheManager cm;
...
public void makeAllCarsRed(){
Cache cache = cm.getCache("cacheName");
//remove from cache
cache.evict(key)
//or, if neddec add to cache
put(key, entity);
...
}
}

关于java - 如何部分更新spring缓存(仅一个字段)?(当对象发生变化时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35826385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com