Uso de Redis en aplicaciones Java con la biblioteca Jedis

Para empezar a utilizar Redis en un proyecto Java, es necesario agregar la dependencia de Jedis en el archivo pom.xml.

@WebServlet("/obtener-datos") public class ServletDatos extends HttpServlet { @Override protected void doGet(HttpServletRequest solicitud, HttpServletResponse respuesta) throws IOException { Jedis jedisPool = new Jedis("mi-redis-host", 6379); jedisPool.autenticar("mi-clave-secreta");

    Map<String, String> datosCache = jedisPool.hgetAll("cache_usuario");
    if (datosCache != null && !datosCache.isEmpty()) {
        solicitud.setAttribute("fuente", "Obtenido desde caché Redis");
    } else {
        solicitud.setAttribute("fuente", "Obtenido desde base de datos");
        // Simular datos de base de datos
        jedisPool.hset("cache_usuario", "id", "1001");
        jedisPool.hset("cache_usuario", "nombre", "Carlos Méndez");
        jedisPool.hset("cache_usuario", "correo", "carlos@ejemplo.com");
        datosCache = jedisPool.hgetAll("cache_usuario");
    }
    solicitud.setAttribute("datos", datosCache);
    solicitud.getRequestDispatcher("/resultado.jsp").forward(solicitud, respuesta);
}

}


</div>En proyectos más complejos, se puede combinar Redis con otras tecnologías para optimizar el rendimiento. Por ejemplo, se puede usar Redis para almacenar en caché los resultados de consultas frecuentes, reduciendo así las llamadas a la base de datos. A continuación, se muestra un fragmento de código que integra Redis con la generación de páginas estáticas usando Freemarker y la indexación con Lucene.

<div>```
import redis.clients.jedis.Jedis;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Map;

public class GestorContenido {
    private static Jedis clienteCache;

    static {
        clienteCache = new Jedis("localhost", 6379);
        clienteCache.autenticar("clave-segura");
        clienteCache.select(0); // Seleccionar base de datos Redis
    }

    public void generarPaginaEstatica(String idArticulo, Map<String, Object> datosArticulo) throws Exception {
        // Intentar obtener datos de la caché
        String contenidoCache = clienteCache.get("articulo_" + idArticulo);
        if (contenidoCache == null) {
            // Si no está en caché, generar y almacenar
            Map<String, Object> modelo = new HashMap<>();
            modelo.put("articulo", datosArticulo);
            
            Configuration configFreemarker = new Configuration(Configuration.VERSION_2_3_31);
            configFreemarker.setDirectoryForTemplateLoading(new File("/plantillas"));
            configFreemarker.setDefaultEncoding("UTF-8");
            
            Template plantilla = configFreemarker.getTemplate("detalle.ftl");
            FileWriter escritor = new FileWriter(new File("/salida/" + idArticulo + ".html"));
            plantilla.process(modelo, escritor);
            escritor.close();
            
            // Almacenar en caché para futuras solicitudes
            clienteCache.set("articulo_" + idArticulo, "generado");
        }
    }

    public void actualizarDatos(String clave, Map<String, String> nuevosDatos) {
        // Actualizar en la caché y eliminar entradas relacionadas
        clienteCache.hset(clave, nuevosDatos);
        clienteCache.del("cache_relacionada");
    }
}

Etiquetas: java Redis Jedis servlet Freemarker

Publicado el 6-16 18:55