Introducción a ehcaché
Ehcache es un marco de almacenamiento en caché de Java de código abierto y alto rendimiento que se usa ampliamente en muchos sistemas distribuidos a gran escala y de alta concurrencia. Proporciona una solución de almacenamiento en caché de datos rápida, escalable y distribuida que admite varios cachés a nivel de memoria, cachés a nivel de disco y cachés distribuidos.
Los objetivos de diseño de Ehcache son principalmente proporcionar un alto rendimiento y escalabilidad. Sus principales ventajas incluyen:
- 1. Alto rendimiento: Ehcache utiliza memoria y almacenamiento híbrido en disco, admite múltiples estrategias de almacenamiento, puede maximizar el uso de los recursos del sistema y mejorar la velocidad de acceso a la memoria caché.
- 2. Escalabilidad: Ehcache admite el almacenamiento en caché distribuido. Puede realizar la replicación o fragmentación de datos en caché a través de la implementación de múltiples nodos. Admite equilibrio de carga múltiple, recuperación de fallas, procesamiento tolerante a fallas y otros mecanismos, lo que hace que todo el sistema de caché sea altamente disponible y escalable escalabilidad
- 3. Facilidad de uso: Ehcache proporciona un conjunto de interfaces API fáciles de usar, que pueden realizar fácilmente operaciones como lectura, escritura y eliminación de datos almacenados en caché, y también proporciona muchas herramientas de administración y monitoreo en tiempo de ejecución.
En resumen, Ehcache es un marco de caché distribuido maduro y confiable, que es adecuado para escenarios de caché distribuidos a gran escala y de alta simultaneidad.
tutorial
Primero, debe agregar las dependencias de Ehcache. Puede agregar el siguiente contenido al archivo pom.xml:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.9.3</version>
</dependency>
Luego debe configurar Ehcache en el archivo de configuración application.properties:
# Ehcache配置
spring.cache.type=ehcache
spring.cache.ehcache.config=classpath:ehcache.xml
Luego cree el archivo de configuración ehcache.xml y defina el nombre del caché y sus propiedades en él:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<diskStore path="java.io.tmpdir/ehcache" />
<cache name="users"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="100000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300" />
<cache name="books"
maxEntriesLocalHeap="1000"
maxEntriesLocalDisk="10000"
eternal="false"
diskSpoolBufferSizeMB="30"
timeToIdleSeconds="600" />
</ehcache>
Instrucciones de configuración:
<!-- ruta de diskStore: Ubicación de caché de disco -->
<!-- maxEntriesLocalHeap: el número máximo de objetos almacenados en caché en la memoria del montón, 0 no tiene límite -->
<!-- maxElementsInMemory: el número máximo de elementos en caché en la memoria. -->
<!-- eterno: Si los elementos son permanentemente válidos, si es verdadero, se ignorarán los tiempos de espera, el elemento nunca caducará -->
<!-- timeToIdleSeconds: Tiempo de inactividad, es decir, si no hay acceso dentro del tiempo especificado, el caché será invalidado, este atributo solo es válido cuando eterno es falso, y 0 es ilimitado -->
<!-- timeToLiveSeconds: el tiempo de supervivencia, que se calcula desde el momento en que se coloca en el caché, y el caché se invalidará dentro del tiempo especificado. Esta propiedad solo es válida cuando eterno es falso y 0 es ilimitado -- > <!-- overflowToDisk: si los datos en la memoria exceden el límite de memoria, ¿desea almacenarlos en caché en el disco -->
<!-- estadísticas: si recopilar estadísticas. Si necesita monitorear el uso de caché, debe activar esta opción. El valor predeterminado es desactivado (las estadísticas afectan el rendimiento). Establezca estadísticas = "verdadero" para habilitar estadísticas -->
En la clase que necesita usar el caché, puede usar la anotación @Cacheable de Spring para definir las propiedades de caché del método:
@Cacheable(value = "users", key = "#id")
public User getUserById(int id) {
// ...
}
@CacheEvict(value = "user",allEntries = true)
public User updateUserById(User user) {
// ...
}
De esta forma, el valor de retorno se puede almacenar en caché cuando se ejecuta el método, y cuando se solicita el mismo valor la próxima vez, se puede obtener directamente del caché sin ejecutar el método.
Además, hay otras anotaciones como @CachePut, @CacheEvict, @Caching, etc. Para conocer los métodos de uso específicos, consulte la documentación de Spring.
Finalmente, el administrador de caché se puede obtener de las siguientes maneras y su API se puede usar para operaciones de caché:
@Autowired
private CacheManager cacheManager;
public void testCache() {
Cache users = cacheManager.getCache("users");
users.put("1", new User("jack", 18));
User user = users.get("1", User.class);
}