Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot redissonClient.poll()仅返回字符串类型值的前8个字符_Spring Boot_Redis_Redisson - Fatal编程技术网

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

Spring boot redissonClient.poll()仅返回字符串类型值的前8个字符,spring-boot,redis,redisson,Spring Boot,Redis,Redisson,目前正在使用reddison,正在创建redissonClient并尝试从redis服务器轮询数据。如果我通过redis cli进行检查,我可以在redis db中看到数据,但是当我在java应用程序中查看字符串值时,它总是字符串的前8个字符,而不是更多。不知道为什么它不能给我全部的价值 我也尝试过使用.peek()方法,我看到了相同的症状,我只返回了8个字符的字符串 以下是代码的主要部分,我可以根据需要提供更多详细信息: @Service @Slf4j public class RedisCo

目前正在使用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);
    }
}
当我检查redis cli时,我可以看到整个值:

1) "\xfc\t{\"AuditEvent\":{\"timestamp\":\"2018-11-27 04:31:47.818000+0000\" snipped the rest out for brevity}"
最后,如果我在Java应用程序中轮询后检查该项目是否已从Redis中删除,我可以确认它是否已删除


任何帮助都会很好,因为它不会抛出任何特定错误。我在网上找不到任何资源来帮助解决它。

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

刚才我在我的应用程序中使用redisQueue.add时,我注意到在redis中它改为\xfc\x80\x90\x01,而这些确实会在我的应用程序中向我返回整个字符串。我想这和内存分配有什么关系?我将问题标记为已解决,因为我不再经历该问题。如果有人能对这些字母/数字的含义发表评论,尽管这对以后阅读本文的人可能有意义。一旦我研究了它,如果没有人比我更好的话,我会自己加上那个评论

添加编码:

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

这些字母是FstCodec编写的对象标题
RMap map = redisson.getMap("SessionMap"); -->
RMap map = redisson.getMap("SessionMap", new StringCodec("UTF-8"));