
在 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 模糊查询出来。
1 viakiba 2020-05-06 17:43:58 +08:00 你就不能把 byte[] base64 一下吗 |
2 xinshoushanglu 2020-05-06 18:11:26 +08:00 头像很魔性 |
3 qwerthhusn 2020-05-06 20:21:24 +08:00 一样的,数组扩充长度,最后补*,或者说是补 42 但是可能需要对源数据进行转义,比如[]?*这些需要打斜杠,补上反斜杠 92 |
4 qwerthhusn 2020-05-06 20:26:40 +08:00 你在 redis-cli 中设置三个值:mset ab 1 ac 2 ad 3 然后执行 keys "\x61\x2a",你会发现能返回 ab ac ad 其实 redis 压根不区分字符串还是字节,对于 redis 来说没有字符串的概念,全是字节数组 |
5 xhinliang 2020-05-06 20:29:36 +08:00 在线上服务中使用 keys 不是一个好的实践。 |
6 iffi 2020-05-06 20:44:12 +08:00 哈哈哈 模糊查询 keys 有意思 |
7 sdenvi 2020-05-06 22:01:34 +08:00 keys 是个挺大的坑的 |
8 kaigong 2020-05-06 22:07:53 +08:00 via Android 不要用 keys |
9 tairan2006 2020-05-06 22:41:05 +08:00 via Android 老哥,方向错了 |
10 linoder 2020-05-07 00:46:37 +08:00 不要在被开除的边缘疯狂试探 |
11 yiyi11 2020-05-07 03:10:35 +08:00 via Android 只用 string 类型的 key,不然老麻烦了,甚至 value 也全用 string,json 化就完事了。 不要用 jedis,用 lettuce 。 如果是 springboot,直接用 stringRedisTemplete 。 线上环境千万不要用 keys,最好部署阶段时把命令重命名掉。 |
12 jugelizi 2020-05-07 08:02:20 +08:00 via iPhone 有一天生产挂了可能就是楼主的代码干的 |
13 gz233 2020-05-07 15:19:32 +08:00 |