如何在 python 脚本中解码 FST 编码的 redis 密钥?

问题描述

我有一个 Java Spring 应用程序,它使用 Redisson 客户端将一些数据以哈希形式存储在 redis 中。存储的键是字符串(例如“key1”),值是 java 对象。使用的编解码器是认的,所以 FSTCodec.我想要做的是使用python脚本(我使用的是redis-py客户端)在redis中找到一个键并将其删除。当我从 redis 获取密钥时,它们的格式类似于:[b'\xfc\x07key1',b'\xfc\x05key2',b'\xfc\x02key3']。当我做这样的事情时

r = redis.StrictRedis()
hash = r.keys(pattern='*key*')  # to get the hash
hk = r.hkeys(hash[0])
print(hk) # returns [b'\xfc\x07key1',b'\xfc\x02key3']
for key in hk:
   print("key ",key)
   print("value",r.hget(hash[0],key)) #None

结果是没有。我尝试了多种方法获取价值,但无济于事。 (不熟悉python)

如果我使用 redis-cli 在命令行中执行相同操作,则键的格式略有不同 "\xfc\akey1",当我执行 HGET test_key "\xfc\akey1" 时,它会正确返回值。

我应该在这里注意,我必须能够找到已知为“key1”的密钥。因此,我的输入是“key1”,我必须获取所有密钥并扫描它们以找到并删除其中包含“key1”的密钥,在本例中为 \xfc\x07key1。

我也尝试通过 decode_responses 进行解码,但我收到了 UnicodeDecodeError: 'utf-8' codec can't decode byte in position 0: invalid start byte

有没有办法从我的 python 脚本中解码密钥?如,删除 FSTCodec 添加的 \xfc... 部分。否则,我怎样才能得到正确的密钥?将 redisson 使用的编解码器更改为 JsonJacksonCodec 的唯一解决方案是什么?任何帮助将不胜感激

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)