Redis【有与无】【Lettuce】L8.Streaming API
程序员文章站
2022-05-01 08:02:09
...
本文章基于Redis 6.0.9版本,Lettuce 6.0.1.RELEASE版本
目录
例子2.使用Redis列表的ValueStreamingChannel
1.Streaming API
Redis可能包含大量数据。 当数据量对于堆来说太大时,收集会破坏你的内存。 Lettuce可以以List/Set/Map的形式返回你的收集数据,也可以将数据推送到StreamingChannel
接口上。
StreamingChannel
s与回调方法相似。 每个可以返回大数据的方法(transactions/multi和某些配置方法除外)在具有收集返回类的常规方法旁边还指定接受StreamingChannel
的方法。 当数据到达时,Lettuce与StreamingChannel
进行交互,因此可以在命令正在运行且尚未完成时处理数据。
有4个StreamingChannels接受不同的数据类型:
steaming方法的结果是将keys/values/key-value的计数作为long
值。
注意:不要在诸如流API之类的回调内部发出阻塞调用(包括对Lettuce的同步API调用),因为这会阻塞EventLoop。 如果你需要从
StreamingChannel
回调内部的Redis获取数据,请使用异步API或直接使用reactive API。
例子1. HGETALL
的Streaming结果
Long count = redis.hgetall(new KeyValueStreamingChannel<String, String>()
{
@Override
public void onKeyValue(String key, String value)
{
...
}
}, key);
Streaming实时发生到redis响应。 在最后一次调用StreamingChannel之后,方法调用(future)完成。
1.1.例子
例子2.使用Redis列表的ValueStreamingChannel
redis.lpush("key", "one")
redis.lpush("key", "two")
redis.lpush("key", "three")
Long count = redis.lrange(new ValueStreamingChannel<String, String>()
{
@Override
public void onValue(String value)
{
System.out.println("Value: " + value);
}
}, "key", 0, -1);
System.out.println("Count: " + count);
将产生以下输出:
Value: one
Value: two
Value: three
Count: 3