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]
我很困惑,请告诉我为什么 KEYS
和 SCAN
的键不同
嗯...写下答案以备不时之需。
首先。仅当您在 redis 中获得 custom 字节数组时,问题才会重现。如果您保存从 string
派生的 byte[]
- 一切都会好的。
在我们调用 scan
方法后,Jedis 内部本身接收字节数组桶,从我们的字节数组中创建新的字符串实例,这就出现了问题。负字节转移到 65533 值,在转移回字节数组后,我们的原始数组发生了变化。
因此,其中一个解决方案 - 扩展 Jedis
、JedisConnection
和 JedisConnectionFactory
类,其中 Jedis
模拟方法 'scan' 没有转移 byte[]
到 string
我在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]
我很困惑,请告诉我为什么 KEYS
和 SCAN
嗯...写下答案以备不时之需。
首先。仅当您在 redis 中获得 custom 字节数组时,问题才会重现。如果您保存从 string
派生的 byte[]
- 一切都会好的。
在我们调用 scan
方法后,Jedis 内部本身接收字节数组桶,从我们的字节数组中创建新的字符串实例,这就出现了问题。负字节转移到 65533 值,在转移回字节数组后,我们的原始数组发生了变化。
因此,其中一个解决方案 - 扩展 Jedis
、JedisConnection
和 JedisConnectionFactory
类,其中 Jedis
模拟方法 'scan' 没有转移 byte[]
到 string