关于redis模糊匹配的问题

前言:

由于涉及到了模糊匹配,怕存在工作中的误导倾向,在此特定说明,线上代码一定不能使用keys去做模糊匹配,最好是用match,具体原因请自行百度

背景:

# 一次设置 6 个 key
redis> MSET one 1 two 2 three 3 four 4 a10a 5 a9a 6
OK# 对指定标识前后字符进行匹配
redis> KEYS *o*
1) "four"
2) "two"
3) "one"redis> KEYS *hr*
1) "three"# 单个字符占位
redis> KEYS t??
1) "two"# 匹配数据库内所有满足[]的 key ([]中的值网上说的五花八门,经本人测试,其实就是ASCII码范围,例如[10-20]这样是匹配不到a10a的,也就是说[]不能表达数值范围)
redis> KEYS a[10-20]*
无结果redis> KEYS a[1-9]*
1) "a9a"redis> KEYS t[w]*
1) "two"# 匹配数据库内所有 key
redis> KEYS *
1) "a9a"
2) "a10a"
3) "four"
4) "three"
5) "two"
6) "one"

问题说明:

经过上述简单了解,我们发现redis 的模糊匹配并不能很好的支持字符串的匹配,什么意思呢?

例如:

我们现在有这些key 他们都丢在队列中

1#WX002bcd

1#WX001abc

3#WX004oop

2#WX003erd

2#WX003ccf

3#WX004ppi

加入程序中根据逻辑判断之后,我现在只需要取到含有WX001和WX003的key,这下会发现有点无法下手

#redis的keys并不支持类似这样操作
KEYS *#[WX001,WX003]*

目前本人的临时处理方案是,通过判断之后将对应的keys匹配正则放入到一个list中,例如:

//举例集合
List<String> pattens = new ArrayList<>(Arrays.asList("*#WX001*","*#WX003*"));
//对应实现
List<ZSetOperations.TypedTuple<String>> resultList = new ArrayList<>();
for(String patten : pattens){Cursor<ZSetOperations.TypedTuple<String>> scan = bound.scan(ScanOptions.scanOptions().match(patten).build());while(scan.hasNext){resultList.add(scan.next);}
}

然后对list做遍历处理,依次进行scan操作匹配到对应key,然后将其填入到我需要返回的对象中去,这种做法看上去似乎有点蠢,不知道有没有高人能指点一番

关于redis模糊匹配的问题相关推荐

  1. 生产环境慎用 redis 模糊匹配功能!

    Redis是一个key-value存储系统.和Memcached类似,但性能远高于memcached.现在很多大型互联网公司都在使用redis作为自己的缓存实现,但是如果没有合理使用好redis,比如 ...

  2. Redis模糊匹配并删除Key

    文章目录 1. 登录可以连接Redis的机器,安装Redis 2. 执行以下命令,删除模糊匹配到的Key 3. 案例 1. 登录可以连接Redis的机器,安装Redis 详情请参见redis-cli连 ...

  3. redis模糊匹配删除key值

    以下操作无需进行redis登录 进入redis安装目录下的bin目录 执行以下命令 ./redis-cli -a 密码 -p 端口 KEYS 匹配规则 | xargs redis-cli -a 密码 ...

  4. Redis 模糊匹配 SearchKeys

    转载自:http://www.cnblogs.com/zhangyu1024/p/5229887.html 语法:KEYS pattern 说明:返回与指定模式相匹配的所用的keys. 该命令所支持的 ...

  5. redis能模糊删除key吗_redis 模糊匹配和批量删除

    keys 模糊匹配 可用版本: >= 1.0.0 时间复杂度: O(N), N 为数据库中 key 的数量. 查找所有符合给定模式 pattern 的 key , 比如说: KEYS * 匹配数 ...

  6. Redis Redis Cluster 字段模糊匹配及删除

    Questions 在数据库内我们可以通过like关键字.%.*或者REGEX关键字进行模糊匹配.而在Redis内我们如何进行模糊匹配呢?集群情况Redis Cluster的情况是否和单机一致呢?前段 ...

  7. redis生产环境中慎用keys模糊匹配方法

    Redis是一个key-value存储系统.和Memcached类似,但性能远高于memcached.现在很多大型互联网公司都在使用redis作为自己的缓存实现,但是如果没有合理使用好redis,比如 ...

  8. Redis遍历、模糊匹配key的两个命令keys、scan(python使用Redis)

    Redis遍历.模糊匹配key的两个命令keys.scan(python使用Redis) (1)全量遍历–keys命令 获取Redis中的所有键: import redis pool=redis.Co ...

  9. 增强Spring @CacheEvict实现key模糊匹配清除

    系统中集成了Spring cache 使用@CacheEvict进行缓存清除,@CacheEvict可以清除指定的key,同时可以指定allEntries = true清空namespace下的所有元 ...

最新文章

  1. Python开发基础总结之XML+time+OO
  2. 放射科医生选择AI供应商的10大标准
  3. 这就是那个feature map256 256向量
  4. lsnrctl 与 tnsnames.ora 的联系
  5. 【leetcode】1051. Height Checker
  6. 转载:磁盘分区,一篇很好的文章
  7. Amazon S3 设置对象的生命周期Lifecycle
  8. TensorFlow 2.0 - tf.saved_model.save 模型导出
  9. django文件上传,只上传一张
  10. XP远程桌面连接强制登录
  11. POJ NOI0105-42 画矩形
  12. Qt5.14.2安装、配置及测试(Win10)
  13. 《经济机器是怎样运行的》笔记(二)
  14. VR MultiPass\SinglePass(Instanced)\MultiView 浅析和区分总结
  15. Hive集合数据类型(STRUCK,MAP,ARRAY)
  16. 在openSUSE下使用Snapper实现快照…
  17. JDK11源码学习05 | HashMap类
  18. 实例分析SQL中除法的三种写法
  19. android中c文件怎么加logo,c – 如何在CMake中添加“-l”(ell)编译器标志
  20. 应届生昆山offer和上海户口offer要如何选择?

热门文章

  1. 江财计算机排名,江西财经大学排名
  2. -XX:+UseCompressedOops 与 -XX:-UseCompressedOops
  3. Prometheus断电启动异常
  4. iOS:创建撒花动画
  5. python 实时获取股票行情脚本
  6. c语言百万富翁换钱的程序,百万富翁的换钱计划.docx
  7. Promise封装微信小程request请求
  8. C语言中的各种占位符
  9. 添加超声波障碍图层并用rbx1仿真
  10. UE 在C++中生成一个基于蓝图的Actor