csredis icon indicating copy to clipboard operation
csredis copied to clipboard

运行XPending时,如果Stream的pending数据为空时,会报错

Open yus1977 opened this issue 1 year ago • 3 comments

错误为: System.OverflowException:“Arithmetic operation resulted in an overflow.”

代码示例:

            //删除,重新创建,并加入数据,进行测试
            redis.Del(key);
            redis.XGroupCreate(key, group, "0", true);
            redis.XAdd(key, maxLen, "*", ("__data", "my data1"));
            redis.XAdd(key, maxLen, "*", ("__data", "my data2"));

            //检查pending表的长度
            //!!!!!!pending表不存在时,读取会报错!!!!!!!!!
            var pending0 = redis.XPending(key, group);
            //消费确认前,pending 应该等于0
            Assert.True(pending0.count == 0);

            //读取未阅读的消息1,读取2次
            var new1 = redis.XReadGroup(group, consumer, 1, 1,(key, ">"));
            var new2 = redis.XReadGroup(group, consumer, 1, 1,(key, ">"));
            new1[0].data.Should().NotBeNullOrEmpty();
            new2[0].data.Should().NotBeNullOrEmpty();

            //检查pending表的长度
            var pending = redis.XPending(key, group);
            //消费确认前,pending 应该等于2
            Assert.True(pending.count == 2);

            //消费确认
            var id1 = new1[0].data[0].id;
            var id2 = new2[0].data[0].id;
            redis.XAck(key, group, id1);
            redis.XAck(key, group, id2);

            //检查pending表的长度
            //!!!!!!pending表不存在时,读取会报错!!!!!!!!!
            var pending2 = redis.XPending(key, group);
            //消费确认后,pending 应该等于0
            //Assert.True(pending2.count == 0);

yus1977 avatar Sep 06 '22 02:09 yus1977

在 FreeRedis 上测试没问题,FreeRedis 对 redis-server5.0+ 支持得更好一些

2881099 avatar Sep 06 '22 04:09 2881099

v3.8.666 已修复

2881099 avatar Sep 06 '22 04:09 2881099

多谢!! FreeRedis 上是没有问题的 只是一些老项目用了CSRedis,还没有完全迁移过来

yus1977 avatar Sep 06 '22 10:09 yus1977