1

这个问题与我的另一个问题有关

我正在构建一个使用休眠从数据库读取数据的 Spring Web 应用程序。我的应用程序不会知道对数据库所做的任何更改(更新/插入)。在这种情况下有没有办法使用查询缓存?

我配置了查询缓存,当我从不同的应用程序更新数据库时,它不会使缓存失效。我认为这是预期的行为。

当数据库中有更新时,我需要缓存查询并使其失效。如何做到这一点?

4

2 回答 2

1

我不确定是否有任何自动刷新缓存的方法。但我在上一个项目中解决了这个问题。公开如下方法并授予管理员访问权限。一旦在 DB 中完成任何修改,外部调用此方法来刷新缓存。

public void refreshCache()
    {
        try {
            Map<String, ClassMetadata> classesMetadata = sessionFactory.getAllClassMetadata();
            for (String entityName : classesMetadata.keySet()) {

                sessionFactory.evictEntity(entityName);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
于 2013-02-08T04:11:08.367 回答
0

好吧,如果您使用的是 Oracle,以下命令将为您提供表上最后更新的唯一 scn

select max(ora_rowscn) from TableName;

输出

10772982279880

如果需要,您可以进一步将其转换为时间戳

select scn_to_timestamp(10772982279880) from dual

但我认为您不需要将其转换为时间,只需单独缓存rowscn并定期检查表,如果有变化您可以驱逐缓存区域。

Please note that this supports version > 10g
于 2013-02-08T10:13:13.103 回答