@Scheduled(fixedDelay = 5000) public void monitor() { DefaultCacheStatistics statistics = new DefaultCacheStatistics(); // @see http://redis.io/commands/INFO RedisConnection connection = RedisConnectionUtils.getConnection(this.redisConnectionFactory); try { Properties props = connection.info(); Long hitCount = Long.parseLong(props.getProperty("keyspace_hits")); Long missCount = Long.parseLong(props.getProperty("keyspace_misses")); statistics.setGetCacheCounts(hitCount, missCount); // we do not currently have a way of calculating the cache size, so we have to filter List<Metric<?>> metrics = statistics .toMetrics("cache.") .stream() .filter(f -> !f.getName().contains(".size")) .collect(Collectors.toList()); metrics.forEach(m -> metricServices.submit(m.getName(), (Double) m.getValue())); } finally { RedisConnectionUtils.releaseConnection(connection, this.redisConnectionFactory); } }
@Override public CacheStatistics getCacheStatistics(final CacheManager cacheManager, final RedissonCache cache) { final DefaultCacheStatistics defaultCacheStatistics = new DefaultCacheStatistics(); defaultCacheStatistics.setSize((long) cache.getNativeCache().size()); defaultCacheStatistics.setGetCacheCounts(cache.getCacheHits(), cache.getCacheMisses()); return defaultCacheStatistics; }
@Override public CacheStatistics getCacheStatistics(CacheManager cacheManager, RedisCache cache) { DefaultCacheStatistics statistics = new DefaultCacheStatistics(); // @see http://redis.io/commands/INFO RedisConnection connection = RedisConnectionUtils.getConnection(this.redisConnectionFactory); try { Properties props = connection.info(); Long hitCount = Long.parseLong(props.getProperty("keyspace_hits")); Long missCount = Long.parseLong(props.getProperty("keyspace_misses")); statistics.setGetCacheCounts(hitCount, missCount); } finally { RedisConnectionUtils.releaseConnection(connection, this.redisConnectionFactory); } return statistics; }