Как получить записи из кэша запроса второго уровня?

StackOverflow https://stackoverflow.com/questions/2841885

Вопрос

В моем гладкий Применение, я хочу отобразить Все текущие записи кеша второго уровня из всех регионов.

Мой код следующий:

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

Однако все работает нормально, если имя региона не является org.hibernate.cache.StandardQueryCache (Регион используется для Кэш запроса). В этом случае выдается исключение:

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

Погугнув, я не нашел никаких подсказок о Как отобразить список записей кэшированных наборов результатов запросов связано с регионами StandardQueryCache а также UpdateTimestampsCache.

Не могли бы вы помочь мне найти решение для этого?

Это было полезно?

Решение

Это довольно сложно, но это должно вас дальше. Вы можете получить доступ к кэше кэш-памяти запросов через Sessionactory, поэтому предполагая, что у вас есть доступ к этому (например, Via 'Def Sessionacfactory'), вы можете добраться до базовых кэшей, как это:

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
}

Обратите внимание, что значения будут списком длинных значений. Я не уверен, что означает первое (это большое значение, например, 5219682970079232), но остальные являются идентификаторами кэшированных экземпляров классов доменов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top