redis里面存的key是byte[]类型,怎么使用jedis进行key的模糊查询

发布于 2022-08-18 21:07:59 字数 267 浏览 11 评论 7

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

神妖 2022-08-20 01:57:54

同问,楼主解决了吗?

雾里花 2022-08-20 01:56:37

只要 "*".getBytes() 就可以了

场罚期间 2022-08-20 01:56:12

你可以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。

苏佲洛 2022-08-20 01:25:26

同问啊

逆夏时光 2022-08-20 00:42:12

说的什么啊

茶色山野 2022-08-19 15:36:05

使用redisTemplate 处理key是出现乱码的问题,使用String序列化方式即可,

如需要处理以往的key则将可以 key 使用正则  替换。

使用正则替换乱码:

String regEx = "[^\d\w-]";
Pattern p = Pattern.compile(regEx); 
String k=p.matcher(new String(redisKey)).replaceAll("").replace("t","");

伤感在游骋 2022-08-19 04:11:01

同问,没有知道的吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文