redis里面存的key是byte[]类型,怎么使用jedis进行key的模糊查询
在redis里面存储了一些数据,key和value都是byte[]类型,现在想要使用jedis对key进行模糊查询。
jedis里面有keys(String pattern)和keys(byte[] pattern)两个方法,如果存的key是String类型,使用keys(String pattern)能对key模糊查询,例如a*,查找ab和abc。但是如果key是byte[],使用keys(byte[] pattern),查询结果是空的。请问要怎么才能把byte[] 的key模糊查询出来。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
同问,楼主解决了吗?
只要 "*".getBytes() 就可以了
你可以jedis.keys("*" + 你的key前缀 + "*"),没错这里参数先使用字符串类型,自然返回的值也是Set<String>,但是你Debug会发现set集合竟然有元素,里面都是部分乱码字符串,那么我们在遍历Set集合的时候就可以做字符串截取:String newKey = set集合元素.trim().substring(set集合元素.indexOf(你的key前缀));这时候返回新的字符串就是你很眼熟的也想要的东西了,其实也就是把乱码的部分舍去,因为keys()中字节转字符串乱码了。之后你就可以根据这个字符串序列化然后get到byte[] value,这里相当于重新序列化得到字节数组类型的key。然后反序列得到对象。呃呃呃其实我也在逃避那个keys(byte[])返回null问题。
从图我们就可以看出字节数组的key要表示成字符串就是这种样子,那我们只需要从key前缀截取后面内容得到的就是我们之前存进去的字符串key,然后我们再一次重新序列化为字节数组的key。
同问啊
说的什么啊
使用redisTemplate 处理key是出现乱码的问题,使用String序列化方式即可,
如需要处理以往的key则将可以 key 使用正则 替换。
使用正则替换乱码:
同问,没有知道的吗?