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

2024-10-01 07:36:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个JavaSpring应用程序,它使用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\x05key2', 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脚本中解码密钥?如中所示,删除\xfc。。。由FSTCodec添加的部分。否则,我怎么才能找到正确的钥匙?是将redisson使用的编解码器更改为JSONJacksonDec的唯一解决方案吗?任何帮助都将不胜感激


Tags: key脚本redis客户端格式编解码器密钥hash