Java 仅当redis队列包含任何数据时,才从该队列读取数据

Java 仅当redis队列包含任何数据时,才从该队列读取数据,java,redis,stream,queue,streaming,Java,Redis,Stream,Queue,Streaming,我有一个redis队列,比如说“TestQueue” 目前,我不断地从队列弹出,而没有考虑队列是否包含数据,根据我下面的代码 private void startStreaming() { JedisConnectionManager redis = new JedisConnectionManager(); Jedis jedis = redis.getJedisConnection(); while (true) { L

我有一个redis队列,比如说“TestQueue”

目前,我不断地从
队列
弹出,而没有考虑
队列
是否包含数据,根据我下面的代码

private void startStreaming() {
        JedisConnectionManager redis = new JedisConnectionManager();
        Jedis jedis = redis.getJedisConnection();
        while (true) {
            List<String> redisData = jedis.brpop(0, new Constants().getRedisBackupQueue());
            String query = redisData.get(1);

            LOGGER.info("data received from redis backup queue: " + query);
            writeToCassandra(query);
        }
    }
private void startStreaming(){
JedisConnectionManager redis=新的JedisConnectionManager();
绝地=redis.getJedisConnection();
while(true){
List redisData=jedis.brpop(0,新常量().getRedisBackupQueue());
字符串查询=redisData.get(1);
LOGGER.info(“从redis备份队列接收的数据:”+查询);
写卡桑德拉(查询);
}
}
我想要完成的是,我只想在队列包含一些数据时(例如,某种生产者-消费者问题)才弹出,而不是连续弹出


如何更好地为我的用例实现上述代码。

brpop(0,…)
可能永远阻止连接。您可以反转逻辑并利用键空间通知,在消息插入队列时通过Pub/Sub进行侦听
BRPOP
polling也不算太糟糕,但是您应该设置一个短的间隔(<30秒),以最大限度地减少由于不活动而导致某些网络组件关闭连接的可能性。根据我的用例,publish-subscribe有一个小问题。如果我错过了一些信息怎么办。我将永远失去它。上面的代码不会持续弹出-它耐心地等待,直到列表中有东西。阅读文档。是的,使用
brpop
等待获取一些数据。谢谢你把它清理掉。