如何在python脚本中解码fst编码的redis键?

vddsk6oq  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(239)

我有一个JavaSpring应用程序,它使用Redison客户机将一些数据以散列形式存储在redis中。存储的键是字符串(例如“key1”),值是java对象。使用的编解码器是默认的,所以fstcodec。我想做的是使用python脚本(我使用的是redis py client)在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添加的部分。否则,我怎么才能找到正确的钥匙?唯一的解决方案是将redison使用的编解码器更改为jsonjacksoncodec吗?任何帮助都将不胜感激

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题