Spring绝地武士。 SCAN 和 KEYS 键不匹配

Spring Jedis. SCAN and KEYS keys mismatch

我在redis中放了一个key-value,其中key是UUID转字节数组,用于space优化

"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

的键不同

嗯...写下答案以备不时之需。

首先。仅当您在 redis 中获得 custom 字节数组时,问题才会重现。如果您保存从 string 派生的 byte[] - 一切都会好的。
在我们调用 scan 方法后,Jedis 内部本身接收字节数组桶,从我们的字节数组中创建新的字符串实例,这就出现了问题。负字节转移到 65533 值,在转移回字节数组后,我们的原始数组发生了变化。

因此,其中一个解决方案 - 扩展 JedisJedisConnectionJedisConnectionFactory 类,其中 Jedis 模拟方法 'scan' 没有转移 byte[]string