Redis Scan指令解析与使用示例

Redis Scan指令解析与使用示例


概念

  想要从redis key列表中找到某个key,redis提供了一个简单粗暴的指令keys用来列出满足查询条件的所有key。

keys redis*
keys redis*key

  key指令非常简单,只要提供一个简单的正则表达式即可,但是有两个明显的缺点:

  1. 没有sffset和limit参数,一次性吐出所有满足条件的key。
  2. keys遍历算法时间复杂度O(n),如果实例中有千万级以上的key,那么keys一下就会导致redis服务卡顿,影响所有读写操作。

  redis为了解决这个问题,在2.8版本中加入了scan指令,对比key具有不少特点:

  1. 虽然时间复杂度也是O(n),但是scan通过游标分步进行,不会阻塞线程(scan指令本身不会阻塞,但是如果在遍历过程中进行了大量写入操作)。
  2. 提供limit参数控制每次遍历的字典槽位的数量。
  3. 同key一样,它也提供了模式匹配功能。
  4. 服务器不需要单独为游标保存状态。
  5. 返回结果可能会有重复。
  6. 遍历途中有数据改动,无法保证会被遍历。
  7. 返回的游标值为0表示遍历结束。
scan 0 match you* count 1000

  scan指令有三个参数,第一个参数是游标cursor值(从0开始);第二个参数是需要匹配的正则表达式;第三个参数是遍历的limit限制。

scan遍历顺序

  scan的遍历顺序不是从一位数组的第0位一直遍历到最后一位,而是采用高位进位加法来遍历。
  高位进位加法就是,从左边加,进位往右边移动,例如:

0000 —+1—> 1000 —+1—> 0100 —+1—> 1100

  二进制逢一进一:
  第一次对最高位+1,最高位变为1;
  第二次对最高位+1,发现最高位已满需要向右进一,从而最高位变为0,次高位为1;
  第三次对最高位+1,最高位变为1,且不改变次高位;
  redis之所以这样设计,是为了防止字典扩容和缩容重复遍历和遗漏。


一键三连,让我的信心像气球一样膨胀!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/780282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java复习第十三天学习笔记(HTML),附有道云笔记链接

【有道云笔记】十三 3.29 HTML https://note.youdao.com/s/Ru3zoNqM 一、基本标签 HTML:超文本标记语言 定义页面结构 CSS&#xff1a;层叠样式表 页面显示的样式、排版 BootStrap JS: JavaScript 界面交互(动态交互、逻辑) JQuery <!DOCTYPE html> <html> &l…

C++Template<>模版的介绍及深度解析

一、泛型编程 1.什么是泛型编程 泛型编程&#xff1a;是一种程序设计方法&#xff0c;编写于类型无关的通用代码&#xff0c;实现代码复用。而模版就是泛型编程的基础和核心。 二、template<>模版 1.template模版介绍 模版&#xff0c;顾名思义就是一个模具&#xff0…

SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)

文章目录 Direct 交换机特点实战声明交换及其队列(以注解方式)发消息 应用 上一篇文章中的 Fanout 模式&#xff0c;一条消息&#xff0c;会被所有订阅其交换机的队列都消费。 但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到 Dir…

Linux内核之debugfs_create_dir与debugfs_create_file实例与调用栈流程(三十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

.NET CORE使用Redis分布式锁续命(续期)问题

结合上一期 .NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案(.NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案-CSDN博客)。有的小伙伴私信说如果锁内锁定的程序或者资源未在上锁时间内执行完&#xff0c;造成的使用资源冲突&#xff0c;需要如何解决。本…

Windows12安装Docker

环境及工具&#xff08;文末提供&#xff09; Docker Desktop Installer.exe &#xff08;官网&#xff09; 一、查看windows相关配置 查看是否开启相应的功能&#xff0c;如果没有需要开启&#xff0c;然后重启电脑 打开任务管理器&#xff08;CTRLSHIFTESC&#xff09;-&g…

美团二面极差体验

#软件开发2024笔面经# 26号二面的&#xff0c;emo了两天&#xff0c;现在才调整好心态来复盘。 给我的整体感觉就是&#xff0c;极其不尊重人&#xff0c;整个面试环节都在不停打断我&#xff0c;对我的回答不置可否&#xff0c;没有反馈。 上来就让我自我介绍&#xff0c;我刚…

既有理论深度又有技术细节——深度学习计算机视觉

推荐序 我曾经试图找到一本既有理论深度、知识广度&#xff0c;又有技术细节、数学原理的关于深度学习的书籍&#xff0c;供自己学习&#xff0c;也推荐给我的学生学习。虽浏览文献无数&#xff0c;但一直没有心仪的目标。两周前&#xff0c;刘升容女士将她的译作《深度学习计…

ssm 设备采购管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 设备采购管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

java中的继承和组合

继承 在java中继承指的是让类与类之间产生父子关系&#xff0c;被继承的类叫做父类或者基类、超类&#xff0c;继承的类叫做子类或者派生类。这里所说的继承和现实生活中的继承可以理解为同一个意思。当子类继承父类时&#xff0c;子类就能使用父类之中的非私有成员&#xff0c…

(十二)图像的Sobel梯度锐化

环境&#xff1a;Windows10专业版 IDEA2021.2.3 jdk11.0.1 OpenCV-460.jar 系列文章&#xff1a; &#xff08;一&#xff09;PythonGDAL实现BSQ&#xff0c;BIP&#xff0c;BIL格式的相互转换 &#xff08;二&#xff09;BSQ,BIL,BIP存储格式的相互转换算法 &#xff08;三…

使用Spring的缓存抽象来集成不同的缓存提供者,如Ehcache、Redis等

使用Spring的缓存抽象来集成不同的缓存提供者&#xff0c;如Ehcache、Redis等 使用Spring的缓存抽象来集成不同的缓存提供者&#xff0c;如Ehcache、Redis等是非常常见的做法。Spring提供了Cacheable、CachePut、CacheEvict等注解&#xff0c;可以轻松地在Spring应用程序中使用…

Python类的基本结构

当我们在Python中定义类时&#xff0c;我们实际上是在创建一种新的数据类型。类允许我们定义对象的属性和方法&#xff0c;从而构建更复杂的程序。让我们深入探讨一下关于类的一些重要概念。 定义类&#xff1a;基本结构 一个类的基本结构包括以下部分&#xff1a; 类名&…

图论- 最小生成树

一、最小生成树-prim算法 1.1 最小生成树概念 一幅图可以有很多不同的生成树&#xff0c;比如下面这幅图&#xff0c;红色的边就组成了两棵不同的生成树&#xff1a; 对于加权图&#xff0c;每条边都有权重&#xff08;用最小生成树算法的现实场景中&#xff0c;图的边权重…

UI的设计

一、RGB888的显示 即红色&#xff0c;绿色&#xff0c;蓝色都为8位&#xff0c;即通常说的24位色。可以很好显示各种过渡颜色。从硬件上&#xff0c;R、G、B三基色的连接线各需要有8根&#xff0c;即24根数据线&#xff1b;软件上存储的数据量也需要24位&#xff0c;即3个字节&…

元素选择器csp

1.解题思路 注意标签是不分大小写而id分大小写且每行只含一个元素&#xff0c;所以对于每一行提取出其标签&#xff08;统一转换为小写&#xff09;、id(如果有)和通过点的个数计算层级&#xff0c;对于每一组查询输入&#xff0c;找到最后一层的元素&#xff0c;遍历每一行&a…

主干网络篇 | YOLOv8更换主干网络之EfficientNet

前言:Hello大家好,我是小哥谈。EfficientNet是一种高效的卷积神经网络架构,由Mingxing Tan和Quoc V. Le在2019年提出,其设计思想是在不增加计算复杂度的情况下提高模型的准确性。它引入了一个称为"复合系数"的概念,该系数用于同时缩放网络的深度、宽度和分辨率。…

RabbitMQ 延时消息实现

1. 实现方式 1. 设置队列过期时间&#xff1a;延迟队列消息过期 死信队列&#xff0c;所有消息过期时间一致 2. 设置消息的过期时间&#xff1a;此种方式下有缺陷&#xff0c;MQ只会判断队列第一条消息是否过期&#xff0c;会导致消息的阻塞需要额外安装 rabbitmq_delayed_me…

光伏发电量预测(Python代码,CNN结合LSTM,TensorFlow框架)

1.数据集&#xff08;开始位置&#xff09;&#xff0c;数据集免费下载链接&#xff1a;https://download.csdn.net/download/qq_40840797/89051099 数据集一共8列&#xff0c;第一列是时间&#xff0c;特征列一共有6列&#xff1a;"WindSpeed" - 风速 "Sunshi…

C++template之类模版进一步了解

前言&#xff1a;这一篇是在我的上一篇文章的基础上&#xff0c;再进一步所写的。 链接&#xff1a;CTemplate&#xff1c;&#xff1e;模版的介绍及深度解析-CSDN博客 一、类模板实例化 1.非类型模版参数 类型模版参数&#xff1a;就是跟在 class后面或者typename后的类型 非…