【问题标题】:Cacheput annotation not updating cache Hazelcast cacheCacheput 注释未更新缓存 Hazelcast 缓存
【发布时间】:2019-01-16 14:10:46
【问题描述】:

我正在 Spring Boot 中开发一个 java 应用程序。我正在使用 Hazelcast 进行缓存,但是当使用 @CachePut 注释方法时它不会更新缓存 我的代码是这样的:

@CachePut(cacheNames = "cachetest")
public void addData(com.nikesh.webapp.model.CacheTest cacheObj) {
    repo.save(cacheObj);
}

@Cacheable(cacheNames = "cachetest")
public List<com.nikesh.webapp.model.CacheTest> getCacheTestData() {
    return repo.findAll();
}

@SuppressWarnings("unchecked")
@Cacheable(cacheNames = "cachetest")
public List<com.nikesh.webapp.model.CacheTest> getCacheTestDataByPhone(
        String phone) {
    Query q = manager.createNamedQuery("byPhone");
    q.setParameter("phone", phone);
    return q.getResultList();
}

@CacheEvict(cacheNames = "cachetest")
public boolean clearCache() {
    return true;
}

CacheEvict 工作正常。我错过了什么吗?

【问题讨论】:

  • Spring Boot 应该拦截调用并将它们转发给 Hazelcast。如果注释不起作用,我预计会出现 Spring Boot 问题。不幸的是,我不是 Spring Boot 专家。
  • @CachePut注解的方法是void

标签: java caching spring-boot hazelcast


【解决方案1】:

您没有在注释中指定缓存键。

你可以试试如下:

@CachePut(cacheNames = "cachetest", key="#p0.phone")
public CacheTest addData(com.nikesh.webapp.model.CacheTest cacheObj) {
    return repo.save(cacheObj);
}

@Cacheable(cacheNames = "cachetest", key="'phone'")
public List<com.nikesh.webapp.model.CacheTest> getCacheTestData() {
    return repo.findAll();
}

@SuppressWarnings("unchecked")
@Cacheable(cacheNames = "cachetest", key="#p0")
public List<com.nikesh.webapp.model.CacheTest> getCacheTestDataByPhone(
        String phone) {
    Query q = manager.createNamedQuery("byPhone");
    q.setParameter("phone", phone);
    return q.getResultList();
}

@CacheEvict(cacheNames = "cachetest")
public boolean clearCache() {
    return true;
}

【讨论】:

  • 我不太确定如何使用密钥。我会这样尝试,但你能给我任何链接来解释如何使用缓存中的键吗?
  • 这是我为你找到的一个很好的教程 -> websystique.com/spring/…
  • 当我调用 getCacheTestData 方法时它不起作用。当我第一次调用它从数据库中获取时,我又添加了一条记录(addData 方法),然后如果我调用 getCacheTestData 我没有得到新添加的记录。我只有在执行 CacheEvict 后才得到它
  • 我在getCacheTestData上给Cacheable添加了key属性,你可以这样试试吗?我认为 spring 将所有列表与一个生成的键一起放置,所以让我们看看它在指定键字段后是如何工作的。
  • Neil 在上面建议您的方法 addData 返回 void。所以它不会把任何对象缓存起来。所以你应该返回 repo.save(cacheObj) 返回的内容。查看我的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2019-02-25
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多