27. redis之scan
在巨大的数据量的情况下,做类似查找符合某种规则的key的信息
主要有两种方法:
第一种方法使用keys 命令,然后后面带上正则匹配,比如匹配 keys redis* -->匹配以redis开头的所有键,但是keys命令是以阻塞的方式执行的,keys是以遍历的方法实现的复杂度O(n),redis中的key越多,查找实现的代价就会越大,产生的阻塞时间就会越长。
第二种方法就是使用scan命令,它主要是基于游标迭代式批量进行遍历,因此不会阻塞主线程。
基本用法:
SCAN cursor [MATCH pattern] [COUNT count] cursor - 游标。 pattern - 匹配的模式。 count - 指定从数据集里返回多少元素,默认值为 10 。 可用版本 >= 2.8.0
使用方法:
redis 127.0.0.1:6379> scan 0 # 使用 0 作为游标,开始新的迭代 1) "17" # 第一次迭代时返回的游标 2) 1) "key:12" 2) "key:8" 3) "key:4" 4) "key:14" 5) "key:16" 6) "key:17" 7) "key:15" 8) "key:10" 9) "key:3" 10) "key:7" 11) "key:1" redis 127.0.0.1:6379> scan 17 # 使用的是第一次迭代时返回的游标 17 开始新的迭代 1) "0" 2) 1) "key:5" 2) "key:18" 3) "key:0" 4) "key:2" 5) "key:19" 6) "key:13" 7) "key:6" 8) "key:9" 9) "key:11"
对比keys 和scan的优缺点
keys:优点是一次性就能匹配出所有的键值,缺点是如果redis中有上亿个键,那么该命令会严重阻塞redis的主线程,导致redis服务暂时卡顿,业务不能正常使用
scan:有点是不能一次性匹配出所有的键值且匹配出的键值可能会有重复的,但是由于它是基于游标迭代式批量去取键值,所以它不会阻塞redis的主线程。
参考:https://blog.csdn.net/lxw1844912514/article/details/118526528
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-10-20 8.事务是隔离还是不隔离?