ZBLOG

redis-cli -h 127.0.0.1 -p 7001 ZRANGE "{sdp:session:timeout}:expire:portal_timeout\n\bWI443" 0 -1 WITHSCORES redis的key中有\n\b如何才能正确查询出key

在 Redis 中,如果 key 包含特殊字符(如 \n\b 或其他不可见字符),直接通过 redis-cli 查询可能会因为转义或解析问题导致无法正确匹配。以下是几种解决方案:


方法1:使用引号包裹 key(适用于简单转义字符)

redis-cli 中,可以用单引号或双引号包裹 key,避免特殊字符被 shell 解释:

# 使用单引号(推荐)
redis-cli -h 127.0.0.1 -p 7001 ZRANGE '{sdp:session:timeout}:expire:portal_timeout\n\bWI443' 0 -1 WITHSCORES

# 或双引号(需对 \ 再次转义)
redis-cli -h 127.0.0.1 -p 7001 ZRANGE "{sdp:session:timeout}:expire:portal_timeout\\n\\bWI443" 0 -1 WITHSCORES

方法2:使用 --raw 选项(保留原始字符)

通过 --raw 参数禁止 redis-cli 对输出做任何转义处理:

redis-cli -h 127.0.0.1 -p 7001 --raw ZRANGE "{sdp:session:timeout}:expire:portal_timeout\n\bWI443" 0 -1 WITHSCORES

方法3:编程语言客户端查询(精准控制)

如果上述方法无效,可以通过编程语言(如 Python、Java)的 Redis 客户端直接操作二进制安全的 key:

import redis

r = redis.Redis(host='127.0.0.1', port=7001)
key = b"{sdp:session:timeout}:expire:portal_timeout\n\bWI443" # Note the 'b' prefix for bytes
result = r.zrange(key, 0, -1, withscores=True)
print(result)

注意事项

  1. Key的存储形式
    Redis的key是二进制安全的,但需确保查询时传递的字节序列与存储时完全一致。例如:

    • Stored Key: "abc\x01\x02"
    • Query Must Use: "abc\x01\x02" (相同的字节)
  2. 排查工具
    SCAN命令遍历所有key,确认目标key的实际内容:

    redis-cli -h 127.0.0.1 -p 7001 --scan --pattern "*portal_timeout*"
    
  3. 修改建议
    尽量避免在key中使用不可见字符,可替换为URL编码或Base64编码。


如果仍有问题,可以提供更多上下文(如如何写入该key的),以便进一步分析!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23779

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?