【问题标题】:Spring Cache - Only cache some tablesSpring Cache - 只缓存一些表
【发布时间】:2015-11-02 15:38:38
【问题描述】:

我想在我的应用程序中缓存一些数据库表,因为表中的内容每天只更新一次。

我让 Spring Cache 像这样工作:

@Service("stuffManager")
public class StuffManagerImpl implements StuffManager {

    @Autowired
    private StuffDao stuffDao;

    @Override
    @Cacheable("stuffCache")
    public List<Stuff> getAllStuff() {
        return stuffDao.getAllStuff();
    }
}

@Repository("stuffDao")
public class StuffDaoHibernate implements StuffDao {

    @Override
    public List<Stuff> getAllStuff() {
        return getHQLResult("select* from Stuff", null);
    }
}

但是如果我的getAllStuff-method 看起来像这样但我只想缓存Stuff-table,是否可以使用 Spring Cache?

@Repository("stuffDao")
public class StuffDaoHibernate implements StuffDao {

    @Override
    public List<Stuff> getAllStuff() {
        return getHQLResult("select Stuff.* from Stuff inner join OtherStuff on Stuff.Id = OtherStuff.Id", null);
    }
}

【问题讨论】:

  • 1.你用@Cacheable注解的方法应该有方法args,这样你下次可以用arg值作为key来检索2.Spring缓存提供了抽象来存储java对象在底层缓存。由您决定如何填充您的 java 对象。
  • @AmitParashar 你能澄清一下这如何解决我的问题吗?

标签: java spring spring-cache


【解决方案1】:

你不能那样做。 Spring 缓存“方法执行”——当你调用方法时,Spring 检查缓存中是否存在键并返回相应的值,否则调用方法,从数据库中提取数据,添加到缓存并返回。当您将某个表与其他表连接时,这会发生在数据库中。

您不能使用 Spring Cache 缓存数据库中的表。仅从方法返回的值。

如果你想在内存中缓存一些数据库表,一些数据库提供了这样的功能,但是你必须在数据库中做,而不是在服务器上。

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2019-08-08
    • 2021-04-04
    • 1970-01-01
    • 2016-09-08
    • 2017-06-18
    相关资源
    最近更新 更多