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");
}
}