原文网址:Redis--模糊查询--方法/实例_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍Redis模糊查询的方法。

官网网址

https://redis.io/commands/keys/

https://redis.io/commands/scan/

Redis模糊查询键的方法

Redis提供了两种模糊查询键的方法:KEYS , SCAN。推荐用SCAN,下边会介绍。

模糊查询的通配符

KEYS和SCAN都支持glob通配符中的三个:*,?,[]:

  • *:通配任意多个字符
  • ?:通配单个字符
  • []:通配括号内的某一个字符

示例

  • h?llo

    • 匹配 hello, hallo and hxllo
  • h*llo
    • 匹配 hllo、heeeello
  • h[ae]llo
    • 匹配 hello、hallo
    • 不匹配 hillo
  • h[^e]llo
    • 匹配 hallo、hbllo…
    • 不匹配 hello
  • h[a-b]llo 匹配 hallo and hbllo

KEYS

说明

KEYS指令会一次性查出所有满足条件的key(没有 offset、limit 参数)。keys 算法是遍历算法,复杂度是 O(n)。

数据量大时会有问题:redis 是单线程的,操作都是原子的,如果实例中有千万级以上的 key,这个指令就会导致 Redis 服务卡顿,所有读写 Redis 的其它的指令都会被延后甚至会超时报错,可能会引起缓存雪崩甚至数据库宕机。

指令格式

KEYS pattern

pattern即key的正则表达式。

示例

先写入一些数据:

192.168.xxx.21:6379[2]> set hello 1
OK
192.168.xxx.21:6379[2]> set word 1
OK
192.168.xxx.21:6379[2]> set hellp 1
OK
192.168.xxx.21:6379[2]> set ahellog 1
OK
192.168.xxx.21:6379[2]> set hellog 1
OK

查询:

192.168.xxx.21:6379[2]> keys *
1) "hello"
2) "hellog"
3) "hellp"
4) "word"
5) "ahellog"
192.168.xxx.21:6379[2]> keys *hell*
1) "hello"
2) "hellog"
3) "hellp"
4) "ahellog"
192.168.xxx.21:6379[2]> keys hell*
1) "hello"
2) "hellog"
3) "hellp"
//知道前面的一些字母,忘记了最后一个字母
192.168.xxx.21:6379[2]> keys hell?
1) "hello"
2) "hellp"
//知道前面的一些字母,忘记了最后两个个字母
192.168.xxx.21:6379[2]> keys hell??
1) "hellog"
//知道前面四个字母,最后一个字母有可能是p t y 其中的一个
192.168.xxx.21:6379[2]> keys hell[pty]
1) "hellp"
192.168.xxx.21:6379[2]>

SCAN

说明

Redis 2.8版本引入,目标是解决keys命令的一些问题,特点:

  1. 复杂度O(n),通过游标分步进行的,不会阻塞线程;
  2. 提供 limit 参数,可以设置每次返回结果的数据量,limit只是对增量式迭代命令的hint,返回的结果可多可少;
  3. 支持模式匹配功能;
  4. 服务器不需要为游标保存状态,游标的唯一状态就是 scan 返回给客户端的游标整数;
  5. 返回的结果可能会有重复,需要客户端去重复;
  6. 无法提供完整的快照遍历,即遍历过程中若有数据修改,改动后的数据可能遍历不到;每次返回的数据条数不一定,极度依赖内部实现;
  7. 单次返回的结果是空的并不意味着遍历结束,而要看返回的游标值是否为零

SCAN不是从第一维数组的第 0 位一直遍历到末尾,而是采用高位进位加法来遍历。之所以使用这样特殊的方式进行遍历,是考虑到字典的扩容和缩容时避免槽位的遍历重复和遗漏。

高位进位法从左边加,进位往右边移动,同普通加法正好相反。但是最终它们都会遍历所有的槽位并且没有重复。

指令格式

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

  • cursor

    • 游标,当次遍历的起始位置
  • pattern
    • 与Keys命令中的patterns相同,支持通配符匹配
  • count
    • 返回数据条数。默认为10
    • 如果MATCH选项没有指定,则返回条数可能大于等于这个数。因为Redis对全局哈希表的每个哈希槽进行遍历,一旦发现拿到的元素个数大于了count,就停止遍历。若一个桶里有多个元素,这时返回的元素就有可能多于count一点了。
  • type:
    • Redis 6.0 支持的参数,指定返回Key的类型,类型可选值与 TYPE命令相同:string, list, set, zset, hash and stream。

第一次遍历时,cursor 值为 0,然后将返回结果中第一个整数值作为下一次遍历的 cursor。一直遍历到返回的 cursor 值为 0 时结束。

示例

192.168.xxx.21:6379[2]> keys *
1) "hello"
2) "hellog"
3) "hellp"
4) "word"
5) "ahellog"
192.168.xxx.21:6379[2]> scan 0 match *ll* count 2
1) "5"
2) 1) "hellp"2) "hello"
192.168.xxx.21:6379[2]> scan 5 match *ll* count 2
1) "0"
2) 1) "hellog"2) "ahellog"
192.168.xxx.21:6379[2]> 

Redis--模糊查询--方法/实例相关推荐

  1. java模糊查询代码_Java模糊查询方法详解

    这篇文章主要为大家详细介绍了Java模糊查询方法的实现,实例教你如何用Java做模糊查询结果,感兴趣的小伙伴们可以参考一下 当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知 ...

  2. Redis模糊查询及批量删除key

    Redis模糊查询及标题批量删除key 一.登录redis,常用操作 登录本机redis服务器:redis-cli 输入密码验证:auth password 查看所有key:keys * 设置key: ...

  3. key redis 模糊查询个数_Reids Lua 模糊查询所有key 及 相对应的集合总数

    Redis 使用 Lua 模糊查询所有key 及 相对应的集合总数 .Net 4.5.1 需要引入:    StackExchange.Redis  (测试用的 1.2.4.0) 方法一: 优点:原子 ...

  4. 搜索框实现模糊查询方法 - js

    日常开发中经常会遇到搜索框查询的例子,需要对数组中的元素进行检索并查询出所需的结果,通过如下方式简单实现了一个小的模糊查询,具体如下: 首先,用到了两个方法 1.对数组通过 filter 的方式遍历查 ...

  5. java redis模糊查询_Redis模糊查询

    最近使用Redis优化项目功能,其中有一部分为模糊查询,找了很多帖子,也没有找到很好的解决方案和思路,最终皇天不负有心人啊,终于让我找到了!!! 可以通过Redis中keys命令进行获取key值,具体 ...

  6. php拼音模糊查询,PHP模糊查询技术实例分析【附源码下载】

    本文实例讲述了PHP模糊查询技术.分享给大家供大家参考,具体如下: 简介 从本质上揭密PHP模糊查询技术 功能 根据输入的关键字查找相关用户 PHP用户查询器案例分析 课程目标 掌握PHP模糊技术的应 ...

  7. oracle模糊批量查询,Oracle 模糊查询方法

    在这个信息量剧增的时代,如何帮助用户从海量数据中检索到想要的数据,模糊查询是必不可少的.那么在Oracle中模糊查询是如何实现的呢? 一.我们可以在where子句中使用like关键字来达到Oracle ...

  8. Java不区分大小写模糊查询方法_查询语句中不区分大小写和区分大小写及其模糊查询 的语句...

    1:不区分大小写的函数 collate Chinese_PRC_CI_AS select * from J01 left join S40 on J0101=S4004 collate Chinese ...

  9. ArcGIS10.8按属性选择中根据关键字like模糊查询方法总结

    在实际工作中,通常需要按照某一个或某几个关键字进行模糊查询,已到达快速.准确.高效查询的目的.在ArcGIS中是通过SQL语句,利用关键字like来实现的.例如我们可以借助like快速查询满足以某一个 ...

最新文章

  1. 使用元组输入进行计算和归约
  2. adc0808温度换算公式_温湿度传感器的三种模拟量换算关系
  3. IP中继如何工作?——Vecloud
  4. 二叉树遍历算法的六种c语言实现 递归与非递归
  5. Fiddler简介及安装和HTTPS的解决
  6. Java项目打包成exe的详细教程
  7. springboot idea debug 模式下启动特别忙,且无法访问
  8. 《Go 语言程序设计》读书笔记 (三) 方法
  9. net 架构师-数据库-sql server-001-SQL Server中的对象
  10. 12c rman中输入sql命令
  11. HTML - 元素/标签和属性基础
  12. 如何将超大文件传输给别人,超大文件如何传输
  13. SQL学习笔记04 极客时间 SQL必知必会50讲
  14. 基于主成分分析法的PCA人脸识别算法实现
  15. 计算机思维是运用计算机科学的什么,计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列计算机的思维活动。...
  16. 安装Microsoft Office - Win系统
  17. 山东理工ACM 1152 C语言实验——求两个整数之和
  18. std::uninitialized_copy::_Unchecked_iterators::_Deprecate
  19. Vue中video播放m3u8视频
  20. 微信小程序开发踩坑经验——小蜗社群

热门文章

  1. 域名怎么管理,域名管理注意事项有哪些?
  2. 从零开始学习大数据笔记 - 开篇
  3. 一半是 BAT 大厂被裁 iOS ,扛不住了
  4. Arcgis使用教程(七)书签(BookMarks)操作使用方法
  5. d2rq-0.8.1工具构建RDF模型
  6. 华为mate9 android p,华为Mate10 Android P运行crash
  7. 不得不发!太搞了@给哈韩们有力一击@!视频@大叔开niao!
  8. word格式转换成pdf格式转换器
  9. IOS 3D Touch 开发教程
  10. 大专计算机专业有什么课程,大专计算机学什么课程 主要内容有哪些