如何在 redis cli 或 shell 脚本中解码值

How to decode value in redis cli or shell script

提问人:learn java 提问时间:10/29/2017 最后编辑:learn java 更新时间:9/15/2023 访问量:6054

问:

我已经编写了 redis-cli bash 脚本来处理批量检索的所有键和值,但值没有按预期打印。当我在 redis-cli 中给出我的密钥时,它用所有特殊字符打印:

我的密钥和 redis-cli 的输出

redis-cli MGET "0124" "0016"
1) "\x1f\x8b\b\x00\x00\x00\x00\x00\x00\x00\x1d\x8e1\x0e\xc3@\b\x04?\x04\x0e8Q\x17\xa9\xf9\xdc\xdeY\x0b2\x91[\xfd>K\x99\xfd\xaf\xfc\x03\xeb-1\x10\xef\x00\x00\x00"
2) "\x1f\x8b\b\x00\x00\x00\x00\x00\x00\x00\x1d\x8e1\x92\x031\b\x04?\x04k\x84\x10\xa0\xf8\x1;\xa8-7\xbb\xa2> \xc0n\xdc\xe1\xce\xdb\xbdk\xac\x81\x9a]Q*\x8ex\xa4\xe0\x99\xd5\xd1\xb3\x94w^\x9f]\xa7$2\xce;\xdcp\x9c\x9b\xff;\xff\x01\xb3\xcc\xd5H\xf0\x00\x00\x00"

有人可以帮忙如何在 redis-cli 或 shell 脚本中解码此值。 我是 Redis 的新手 - 如果您能帮助我解决这个问题,我将不胜感激

我使用了 gunzip - 但我得到以下错误:

redis-cli -h GET "100" | gunzip

错误:

   gzip: stdin: unexpected end of file
   gzip: stdin: decompression OK, trailing garbage ignored

Redis-cli 代码:

#!/bin/sh
hostName=$1
port=$2
count=$3
cursor=-1
keys=""
recordCount=0
while [ $cursor -ne 0 ];
do
        if [ $cursor -eq -1 ]
        then
        cursor=0
    fi
    reply=`redis-cli -h $hostName -p $port SCAN $cursor MATCH "*" COUNT $count`
    cursor=`expr "$reply" : '\([0-9]*[0-9 ]\)'`
    keys=${reply#[0-9]*[[:space:]]}
    value=$(redis-cli -h $hostName -p $port MGET $keys)
    temCount=`echo $value | awk -F\| '{print NF-1}'`
    recordCount=`expr ${temCount} + ${recordCount}`
done
echo "Total no. of documents are: " $recordCount

我的 Redis 键值模式:

Keys - 123.item.media
Values - 93839,abc,98,829|38282,yiw,282,282|8922,dux,382,993|

Keys - 234.item.media
Values - 2122,eww,92,211|8332,uei,902,872|9039,uns,892,782|

Keys - 839.item.media
Values - 7822,nkp,77,002|7821,mko,999,822|
bash shell utf-8 redis redis-cli

评论

1赞 Mr. bug 10/29/2017
echo -e “......”应该可以解决问题。
0赞 learn java 10/29/2017
我尝试了类似这样的 value=$(redis-cli MGET $keys) echo -e $value |枪拉链.但它没有用
0赞 Mr. bug 10/29/2017
怎么样?value=echo -e "$(redis-cli MGET $keys)" | gunzip
0赞 learn java 10/29/2017
我得到-e:找不到命令
1赞 Charles Duffy 10/30/2017
@Mr.bug,除了在 POSIX 标准输出时打印两个字符的序列之外,不允许做任何事情(这是 bash 实际上在做标准禁止的事情的极少数地方之一,而不是将扩展放在未定义的空间中),并且在某些模式下(当同时设置和标志时),bash 提供上述扩展。考虑养成改用的习惯。另请参阅 pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html,特别是 APPLICATION USAGE 和 RATIONALE 部分。echo-e-expg_echoposixprintf '%b\n' "$value"

答: 暂无答案