Supongo que todos los elementos almacenados en caché están en DiskStore y desea que estén en la memoria tan pronto como se inicie la aplicación. En cualquier caso, usar BootStrapCacheLoader y BootstrapCacheLoaderFactory debería ser útil.
sólo estoy dando idea de dónde cargamos DiskStore en memeory después de la aplicación se inicia
Puede implementar BootstrapCacheLoader que cargará los elementos de caché de la siguiente manera. Definición del método BootstrapCacheLoader.carga (caché Ehcache) puede haber
//CustomBootstrapCacheLoader implements BootstrapCacheLoader
List<?> keys = cache.getKeys();
if ((keys == null) || keys.isEmpty())
{
return;
}
for (Object key : keys)
{
Element el = cache.getQuiet(key);
cache.removeQuiet(key);
cache.putQuiet(el);
}
Sobre método lee el elemento de diskcache, lo quita y pone de nuevo para que se mantenga en la memoria y se elimina la versión de disco.
Implementar BootstrapCacheLoaderFactory modo que
public class CustomBootstrapCacheLoaderFactory extends BootstrapCacheLoaderFactor
{
.
.
@Override
public BootstrapCacheLoader createBootstrapCacheLoader(Properties properties)
{
CustomBootstrapCacheLoader loader = new CustomBootstrapCacheLoader();
loader.setAsynchronous(getAsyncFromProperty(properties));
return loader;
}
.
.
}
Puede definir la configuración de la memoria caché de la siguiente manera con CustomBootstrapCacheLoaderFactory como a continuación
<cache
name="DummyCacheEl"
maxElementsInMemory="3500"
eternal="true"
overflowToDisk="false"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU">
<bootstrapCacheLoaderFactory class="CustomBootstrapCacheLoaderFactory" properties="async=true"/>
</cache>
Se puede recorrer todas las entradas en el arranque? –
Eso es lo que hago actualmente, pero la forma en que se hace es muy lenta (llamo a los métodos de alto nivel en bucles, y esos métodos de alto nivel también hacen solicitudes de DB). Si hubiera una manera de iterar simplemente en todas las entradas directamente con la API de EhCache, eso podría ser bueno. –