春天绝地。 SCAN和KEYS键不匹配

时间:2015-09-21 11:07:05

标签: java redis jedis

我在redis中放入一个键值,其中键是UUID转换为字节数组,用于空间优化。

"3DEBB752-654A-4206-89BA-D3517237312E" -> [-119, -70, -45, 81, 114, 55, 49, 46, 61, -21, -73, 82, 101, 74, 66, 6].

我使用Spring Jedis从Redis服务器获取数据,当我尝试通过KEYS函数获取密钥时

jedisConnection.keys("*".getBytes());

我得到了

[-119, -70, -45, 81, 114, 55, 49, 46, 61, -21, -73, 82, 101, 74, 66, 6]

但是,当我尝试通过SCAN函数获取密钥时

jedisConnection.scan(ScanOptions.NONE);

键以某种方式改变了这个

[-17, -65, -67, -17, -65, -67, -17, -65, -67, 81, 114, 55, 49, 46, 61, -17, -65, -67, 82, 101, 74, 66, 6]

我很困惑,请告诉我为什么KEYSSCAN的密钥不同

1 个答案:

答案 0 :(得分:1)

嗯......如果有人需要,请写下答案。

首先。只有在redis中有自定义字节数组时才会重现问题。如果你保存byte[]来自string - 一切都会好的 在我们调用scan方法之后,Jedis在其自身内部接收字节数组桶,从我们的字节数组创建新的字符串实例,并且存在问题。负字节传输到 65533 值,并且在传回字节数组后,我们的原始数组会发生变化。

所以,其中一个解决方案 - 扩展JedisJedisConnectionJedisConnectionFactory类,Jedis中的方法'scan'类似于'而不转移byte[] } string