redissonClient.poll() 只返回String类型值的前8个字符
redissonClient.poll() only returning the first 8 characters of String type value
目前正在使用reddison,正在创建一个redissonClient 并尝试从redis 服务器轮询数据。如果我通过 redis-cli 检查,我可以在 redis 数据库中看到数据,但是当我在 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 中删除,我可以确认它是。
任何帮助都会很好,因为它不会抛出任何特定错误我没有在网上找到任何资源来帮助解决它。
我发现了一件事我在之前的测试中没有注意到。当我使用 redis cli 手动插入时,我正在复制我通过 Java 所做的第一次测试,将 \xfc\t 放在前面,这可以在我上面的示例中看到。
刚才当我在我的应用程序中使用 redisQueue.add 时,我注意到在 Redis 中它有 \xfc\x80\x90\x01 而不是 return 我的应用程序中的整个字符串。我假设这与内存分配有某种关系?我将问题标记为已解决,因为我不再遇到该问题。如果有人可以就这些 letter/numbers 的含义发表评论,尽管它可能对以后阅读此 post 的任何人有意义。一旦我研究了它,如果没有人击败我,我会自己添加评论!
添加编码:
RMap map = redisson.getMap("SessionMap"); -->
RMap map = redisson.getMap("SessionMap", new StringCodec("UTF-8"));
目前正在使用reddison,正在创建一个redissonClient 并尝试从redis 服务器轮询数据。如果我通过 redis-cli 检查,我可以在 redis 数据库中看到数据,但是当我在 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 中删除,我可以确认它是。
任何帮助都会很好,因为它不会抛出任何特定错误我没有在网上找到任何资源来帮助解决它。
我发现了一件事我在之前的测试中没有注意到。当我使用 redis cli 手动插入时,我正在复制我通过 Java 所做的第一次测试,将 \xfc\t 放在前面,这可以在我上面的示例中看到。
刚才当我在我的应用程序中使用 redisQueue.add 时,我注意到在 Redis 中它有 \xfc\x80\x90\x01 而不是 return 我的应用程序中的整个字符串。我假设这与内存分配有某种关系?我将问题标记为已解决,因为我不再遇到该问题。如果有人可以就这些 letter/numbers 的含义发表评论,尽管它可能对以后阅读此 post 的任何人有意义。一旦我研究了它,如果没有人击败我,我会自己添加评论!
添加编码:
RMap map = redisson.getMap("SessionMap"); -->
RMap map = redisson.getMap("SessionMap", new StringCodec("UTF-8"));