4

在我的grails应用程序中,我想显示来自所有区域的二级缓存的所有当前条目

我的代码如下:

def getCacheStats() {
  StatisticsImpl stats = sessionFactory.statistics
  for (regionName in stats.secondLevelCacheRegionNames) {
    log.debug stats.getSecondLevelCacheStatistics(regionName).entries
  }
}

但是,只要区域名称不是 org.hibernate.cache.StandardQueryCache(用于Query Cache的区域),一切都可以正常工作。在这种情况下,会引发异常:

java.lang.ClassCastException: org.hibernate.cache.QueryKey cannot be cast to org.hibernate.cache.CacheKey

谷歌搜索后,我没有找到任何关于如何显示与区域StandardQueryCacheUpdateTimestampsCache.

您能帮我找到解决方案吗?

4

1 回答 1

3

这相当复杂,但这应该会让你走得更远。您可以通过 SessionFactory 访问查询缓存,因此假设您可以访问它(例如通过“def sessionFactory”),那么您可以像这样访问底层缓存:

def cache = sessionFactory.queryCache
def realCache = cache.region.@underlyingCache.backingCache
def keys = realCache.keys
for (key in keys) {
    def value = realCache.get(key).value
    // do something with the value
}

请注意,这些值将是 Long 值的列表。我不确定第一个表示什么(它是一个很大的值,例如 5219682970079232),但其余的是缓存域类实例的 ID。

于 2010-05-20T06:25:07.613 回答