实战之redis进行模糊查找

news/2025/1/31 4:19:01/

剧情回顾:

一般,我们都是用keys abc。但是这个会进行全局的搜索,会阻塞redis进程。

解决方法:

使用scan替代keys *。
SCAN的关键词:渐进式迭代。通过游标指定下一次迭代的位置,如果返回的游标为0,说明迭代结束。
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
SSCAN, HSCAN,ZSCAN的用法和SCAN很相似,都是迭代获取内部的元素,他们的第一个参数都是元素的key。
由于这些命令允许增量迭代,每次调用只返回少量的元素,它们可以在生产中使用,而没有像KEYS或SMEMBERS这样的命令的缺点,因为当针对大的键或元素集合调用时,可能会阻塞服务器很长时间(甚至几秒钟)

命令:

scan 0 => keys *
scan 0 match *abc* [count 10] => keys *abc*
hscan hello 0 [match abc*] [count 10] => hgetall hello
sscan hello 0 [match abc*] => smembers hello
zscan hello 0 [match abc*] => zrange hello 0 -1

SCAN的缺点:
SCAN 命令在遍历集合的过程中,集合的内容可能会发生变化,导致某些元素被重复扫描。元素可能会被返回多次。应用程序需要处理重复元素的情况。
在一次完整的迭代遍历过程中,不断出现在集合中的元素,可能不返回。

扩展:
SCAN 命令在处理一些小的集合数据类型时,可能会忽略 COUNT 选项的值,而直接返回所有的元素。这是因为Redis为了节省内存,会使用一种紧凑的编码方式来存储这些小的集合数据类型,
而这种编码方式不支持游标的遍历。所以 SCAN 命令只能一次性地扫描整个数据结构,而不能分批返回。


http://www.ppmy.cn/news/51875.html

相关文章

LVS+Keepalived群集

目录 一、Keepalived概述二、Keepalived服务重要功能三、VRRP通信原理四、Keepalived工具4.1 keepalived体系主要模块及作用4.2 keepalived服务的工作原理 五、keepalived脑裂及解决办法5.1 keepalived脑裂5.2 脑裂的原因5.3 解决对策 六、Keepalived的部署七、LVSKeepalived高…

java反序列化 cc链6 分析

前言 这里分析完cc1的两个以后,白日梦佬又介绍了cc6链,最主要的是这个链子不受jdk的版本影响,甚至不受cs版本的影响,这么说就是cs大部分都是可以使用cc链6,而且这个链子要简洁的很多,我一听这个好啊&#x…

Shell知识点(2)

1.转义 某些字符在 Bash 里面有特殊含义(比如$、&、*)。 $ echo $date$ 输出$date不会有任何结果,因为$是一个特殊字符 如果想要原样输出这些特殊字符,就必须在他们前面加上反斜杠,使其变成普通字符 $ echo \$…

Golang中的一些关键字(defer、:=、go func())

作者:非妃是公主 专栏:《Golang》 博客主页:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录 defervar与 : 的区别var:二者区别 go func de…

字节超全学习流程图流出,100天涨薪10k,从功能测试到自动化测试

今年年初,由于经济压力让我下定决心进阶自动化测试,已经24的我做了3年功能测试,坐标广州薪资定格在8k,可能是生活过的太安逸,觉得8000的工资也够了。 但是生活总是多变的,女朋友的突然怀孕,让我…

SpringBoot配置文件

什么是配置文件 如下图: SpringBoot项目中会有一个自带的配置文件,它是properties后缀的。 配置文件的作用 配置文件是用来配置项目中的一些重要数据的。 如:数据库连接信息、项目的启动端口、日志等等。 如果没有这些信息,S…

操作系统之调度

目录 什么是调度 进程调度的时机、切换、过程与方式 调度器/调度程序 调度算法 先来先服务算法 短作业优先算法 高响应比优先算法 时间片轮转算法 优先级调度算法 多级反馈队列调度算法 什么是调度 调度的三个层次 高级调度 中级调度 低级调度 总结如下: …

‘gulp‘ 不是内部或外部命令,也不是可运行的程序

出现问题: D:\git\renwey-web-mobile>gulp default gulp 不是内部或外部命令,也不是可运行的程序 或批处理文件。 两种原因 原因一:环境变量没有设置 原因二:没有安装全局的gulp,只安装了本地gulp,…