Entradas

Mostrando las entradas con la etiqueta redis

Redis Streams: xadd + xread

Esta ocasión mostraré un ejemplo de Redis Streams , con los metodos xadd y xread utilizando la librería Lettuce .  Generar Mensajes El Stream tendrá el nombre mensajes y cada mensaje enviado tendrá un UUID y un número indicando la cantidad de mensajes enviados: final var cliente = RedisClient.create("redis://localhost:6379"); try (final var con = cliente.connect()) { final var cmd = con.sync(); int i = 0; while (i < 500_000) { final var res = cmd.xadd("mensajes", Map.of(UUID.randomUUID().toString(), String.valueOf(i))); i++; LOGGER.info("enviados: {} - id: {}", i, res); Thread.sleep(1_000); } } cliente.shutdown();  Recibir Mensajes El cliente lee un mensaje a la vez y recuerda el último ID leido para preguntar por los nuevos mensajes y se bloquea 5 segundos esperando mensajes: final var cliente = RedisClient.crea...

Spring Boot con Redis para almacenar JSON y no la serialización predefinida

Imagen
En esta entrada mostraré como utilizar Spring Boot y Redis con el objetivo de almacenar los objetos como JSON y no como la forma de serialización de Java por defecto que tiene RedisTemplate. Los test están con Testcontainers, Junit 5 y AssertJ. Lo primero es la clase que nos convoca, la configuración de RedisTemplate: @Configuration public class RedisConfig { @Autowired private ConfigurableApplicationContext context; @Bean @Primary public RedisTemplate redisTemplate(JedisConnectionFactory conn) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(conn); template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer()); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } @Bean public JedisConnectionFactory redisConnectionFactory(@Value("$...

Usando Redis en Pruebas [versión 2]

Previamente había comentado como utilizar Redis en pruebas mediante redis embebido, pero en esta ocasión utilizaremos Testcontainers , que como lo dicen en su página, podemos utilizar cualquier cosa que corra en docker en nuestros tests 😮. Comencemos Lo primero es incluir en nuestro pom la dependencia a testcontainers: <dependency> <groupId>org.testcontainers</groupId> <artifactId>testcontainers</artifactId> <version>1.11.2</version> </dependency> También incluimos otras librerías de test y el cliente redis: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.11.1</version> <scope>test</scope> </depende...

Usando Redis en Pruebas

Redis nos entrega un almacenamiento de estructuras de datos en memoria, claves y valores, geoespacial, ... y muchas otras cosas que lo hacen muy entretenido y útil. En esta entrada mostraré un ejemplo para utilizarlo en pruebas: Comenzamos con la librería que no entregará redis embebido:  <dependency> <groupId>com.github.kstyrc</groupId> <artifactId>embedded-redis</artifactId> <version>0.6</version> <scope>test</scope> </dependency> Luego agregamos el cliente: <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>5.1.5.RELEASE</version> </dependency> Agregamos nuestro test: @Test public void redisFuncionaLocalmenteEnPruebas() { var client = RedisClient.create("redis://localhost:6000"); try (var con...