我有一个小系统,它在redis中使用HLL系统。这个系统可以:
db0中的GET myHll
SET myHll "<hash>"
到db1- db1中的
PFMERGE myOtherHll myHll
合并2 hll
然而,有时我会收到:(error) INVALIDOBJ Corrupted HLL object detected
示例:
127.0.0.1:6379[7]> pfcount myHll
(integer) 2
127.0.0.1:6379[7]> get myHll
"HYLLx01x00x00x00x02x00x00x00x00x00x00x00@Gx84bxf8x84\xbc"
127.0.0.1:6379[7]> pfcount myOtherHll
(integer) 1
127.0.0.1:6379[7]> get myOtherHll
"HYLLx01x00x00x00x01x00x00x00x00x00x00x00cAxefxbfxbd\xefxbfxbd"
127.0.0.1:6379[7]> pfmerge anotherHll myOtherHll myHll
(error) INVALIDOBJ Corrupted HLL object detected
所以我的问题是:
- 理论上允许我
GET/SET
是hll哈希吗 - 如果我是,你知道为什么它在这里不起作用吗
- 如果我没有,我有其他方法吗
注意:我使用的是redis 6.2.4
感谢
在HyperLogLog哈希上使用GET
/SET
以达到您提到的目的是没有记录的,因此请避免以这种方式使用它。
相反,我建议使用DUMP
从db0中获取密钥的序列化值,并使用RESTORE
在db1上重新创建密钥:这些命令使用Redis本身在将数据集的时间点快照持久化到磁盘时使用的RDB格式。