redissonClient.poll()仅返回String类型值的前8个字符

时间:2019-04-04 18:59:33

标签: spring-boot redis redisson

当前使用reddison,创建redissonClient并尝试从redis服务器轮询数据。如果通过redis-cli检查,我可以在redis db中看到数据,但是当我查看java应用程序中的字符串值时,它始终是字符串的前8个字符,而没有更多。不知道为什么它不能给我全部价值。

我也尝试过使用.peek()方法,并且看到相同的症状,因为我只得到返回的字符串的8个字符。

这是代码的主要部分,我可以根据需要提供更多详细信息:

@Service
@Slf4j
public class RedisConsumer {

RedisConfig redisConfig;
//RQueue<String> redisQueue;
RBlockingQueue<String> redisQueue;

@Autowired
RedisConsumer(RedisConfig redisConfig) {
    this.redisConfig = redisConfig;
}

public void pollAuditQueue() {

    //Redisson
    redisQueue.add("{JSON string here snipped out for brevity}");
    String item = redisQueue.poll();

    if (!Objects.isNull(item)) {
        log.info("I found this item: " + item);

    } else {
       log.info("Nothing in queue...");
   }
}

@PostConstruct
private void init() throws Exception {
    RedissonClient redissonClient = redisConfig.redisson();
    redisQueue = redissonClient.getBlockingQueue("test");

    while(true) {
        pollAuditQueue();
        Thread.sleep(5000);
    }
}

当我在控制台中查看打印语句时,会看到:

I found this item: {"AuditEv

当我检查redis-cli时,我可以看到整个值:

1) "\xfc\t{\"AuditEvent\":{\"timestamp\":\"2018-11-27 04:31:47.818000+0000\" snipped the rest out for brevity}"

最后,如果在Java应用程序中对其进行轮询之后,如果我检查该项目是否已从Redis中删除,我可以确认它是。

任何帮助都将非常有用,因为它不会引发任何特定的错误,我也无法在线找到任何资源来解决该问题。

2 个答案:

答案 0 :(得分:1)

我发现我在较早的测试中没有注意到的一件事。当我使用redis cli手动插入时,我正在复制通过Java进行的首次测试,该测试将\ xfc \ t放在前面,可以在上面的示例中看到。

现在,当我在应用程序中使用redisQueue.add时,我在redis中注意到它有\ xfc \ x80 \ x90 \ x01,而那些确实在我的应用程序中返回了整个字符串。我认为这与内存分配有某种关系吗?我将问题标记为已解决,因为我不再遇到该问题。如果任何人都可以对这些字母/数字的含义发表评论,尽管这对于以后阅读此帖子的任何人可能都是有意义的。一旦研究了它,如果没有人击败我,我将自己添加该评论!

答案 1 :(得分:0)

添加编码:

RMap map = redisson.getMap("SessionMap"); -->
RMap map = redisson.getMap("SessionMap", new StringCodec("UTF-8"));