欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis【有与无】【Lettuce】L8.Streaming API

程序员文章站 2022-05-01 08:02:09
...

本文章基于Redis 6.0.9版本,Lettuce 6.0.1.RELEASE版本

目录

1.Streaming API

例子1. HGETALL的Streaming结果

1.1.例子

例子2.使用Redis列表的ValueStreamingChannel


1.Streaming API

Redis可能包含大量数据。 当数据量对于堆来说太大时,收集会破坏你的内存。 Lettuce可以以List/Set/Map的形式返回你的收集数据,也可以将数据推送到StreamingChannel接口上。

StreamingChannels与回调方法相似。 每个可以返回大数据的方法(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