13 Aralık 2023 Çarşamba

Lettuce - Redis Stream Örnekleri

xadd metodu
İmzası şöyle. Stream'e yeni veri ekler
String xadd(K key, Map<K, V> body);
Örnek
Bu örnekte Lettuce ile Testcontainers ile başlatılan Redis Stream'e veri yazılıyor.  Örneğin bir kısmını Getting Started with Redis Streams and Java yazısından aldım

Maven için şu satırı dahil ederiz
<dependency>
<groupId>com.redis</groupId> <artifactId>testcontainers-redis</artifactId> <version>2.0.1</version> <scope>test</scope> </dependency> <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>6.2.3.RELEASE</version> </dependency>
Şöyle yaparız. Burada JUnit4 kullanıldığı için @ClassRule anotasyonu var.
import com.redis.testcontainers.RedisContainer;

@ClassRule
public static final RedisContainer container = 
  new RedisContainer(DockerImageName.parse("redis:6.2.6"))
  .withLogConsumer(new Slf4jLogConsumer(LOGGER).withPrefix("Docker"));
Veri ile doldururuz. Şöyle yaparız. Artık aboneler veriyi okuyabilir.
import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;

void insertData() {
  String redisURI = container.getRedisURI();
  try (RedisClient client = RedisClient.create(redisURI);
       StatefulRedisConnection<String, String> connection = client.connect()) {

    RedisCommands<String, String> syncCommands = connection.sync();

    for (int index = 0; index < ITEM_COUNT; index++) {
      // Redis Streams messages are string key/values in Java.
      Map<String, String> messageBody = createMessageBody(index);

      String messageId = syncCommands.xadd(
        STREAM_NAME,
        messageBody);

        LOGGER.info("Message {} : {} posted", messageId, messageBody);
    }
  }
}

Map<String, String> createMessageBody(int index) {
  Map<String, String> messageBody = new HashMap<>();
  messageBody.put("speed", String.valueOf(index));
  messageBody.put("direction", "270");
  messageBody.put("sensor_ts", String.valueOf(System.currentTimeMillis()));
  return messageBody;
}


Hiç yorum yok:

Yorum Gönder