在 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
|