Tak, za pomocą Ehcache można skonfigurować pamięć podręczną i pobrać ich rozmiary tylko za pomocą kodu Java (bez konfiguracji XML). Dokładny sposób integracji wszystkiego zależy od Twojej specyficznej architektury; Zamierzam przypuszczać, że Jersey robi rzeczy związane z API i Guice na zastrzyk uzależnienia.
definiowania cache
Dodać menedżer pamięci podręcznej dostępne poprzez wstrzyknięcie zależności. Można to zrobić za pośrednictwem modułu Guice:
@Provides
@Singleton
CacheManager provideCacheManager() {
CacheManager cacheManager = CacheManager.create();
/* very basic cache configuration */
CacheConfiguration config = new CacheConfiguration("mycache", 100)
.timeToLiveSeconds(60)
.timeToIdleSeconds(30)
.statistics(true);
Cache myCache = new Cache(config);
cacheManager.addCacheIfAbsent(myCache);
return cacheManager;
}
Zauważ, że statystyka jest włączony mycache
.
Ponownie, korzystanie z pamięci podręcznej można wykonać w całości w kodzie Java, ale zależy to od architektury i projektu. Zazwyczaj robię to za pomocą przechwytywania metod (poprzez AOP), ale to już inny temat.
Fetch statystyk cache poprzez REST API
Biorąc pod uwagę Twój CacheManager
jest dostępny poprzez wstrzyknięcie zależności można następnie podłączyć go do punktu końcowego REST i umożliwić dostęp do statystyk cache:
@Path("stats")
@Produces("text/plain")
public class StatsResource {
@Inject private CacheManager cacheManager;
@GET
public String stats() {
StringBuffer sb = StringBuffer();
/* get stats for all known caches */
for (String name : cacheManager.getCacheNames()) {
Cache cache = cacheManager.getCache(name);
Statistics stats = cache.getStatistics();
sb.append(String.format("%s: %s objects, %s hits, %s misses\n",
name,
stats.getObjectCount(),
stats.getCacheHits(),
stats.getCacheMisses()
));
}
return sb.toString();
}
}
teraz ty może pobierać informacje o swoich skrytek przez wywołanie REST:
GET /stats
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
mycache: 8 objects, 59 hits, 12 misses
A co z JMX?
Ehcache ułatwia zarejestrowanie menedżera pamięci podręcznej za pomocą serwera MBean. Można to zrobić w kodzie Java. Zaktualizować moduł Guice, Rejestrowanie cacheManager
do systemu MBeanServer
:
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ManagementService.registerMBeans(cacheManager, mBeanServer, false, false, false, true);
Teraz można dołączyć JConsole do procesu Java i znaleźć swoje statystyki cache w MBean net.sf.ehcache.CacheStatistics
.
Jak uzyskać użycie sterty przez pamięć podręczną? Z powyższego przykładu - ile bajtów zajmuje 8 obiektów na stercie? Mamy wiele instancji ehcache i szukam rozwiązania, które daje wykorzystanie sterty pamięci podręcznej. –
Wygląda na to, że ehcache począwszy od wersji 2.6 zapewnia sposób konfiguracji pamięci podręcznej za pomocą maxBytesOnLocalHeap(). Byłby przydatny do obliczenia użycia sterty - http://ehcache.org/documentation/2.6/configuration/cache-size # local-heap –
Wygląda na to, że Ehcache nie dostarcza już getObjectCount(). Czy istnieje alternatywa? – markthegrea