Redis -- 渐进式遍历

     ,是心的方向。不论走多远,总有一盏灯为你留着。桌上的碗筷多了几双,笑声也多了几分温暖。家人团聚,是最美的风景线。时间:2024年 2月 8日 12:51:20


目录

前言 

语法

示例


前言 

        试想一个场景,那就是在key非常多的情况下使用keys *操作,毫无意外的,这个操作会引起不必要的麻烦。由于redis是单线程模型,因此它会占用非常长的时间,导致服务器无法执行其他的命令从而阻塞等待较长时间。

        Redis使用scan命令进行渐进式遍历,进而解决直接使用keys * 获取时间较长的阻塞等待问题,每次使用scan的时间复杂度都是O(1),但是要完整遍历所有的键,需要执行多次scan。

        scan命令可以每次只拿到一小部分key。想拿到所有的key就需要遍历多次。

        渐进式遍历其实是一组命令,这一组的命令的用法其实是非常相似的,甚至说是一样的。其中的代表就是 scan。

        下图是一个scan的使用案例:

         这里的cursor就类似于一种光标,指向了当前遍历的位置。但是它不能理解为下标,它不是连续的递增的整数。返回的数据中,1)这一栏表示下次遍历,光标要从哪开始。

        需要注意的是,渐进式遍历在遍历的过程中,不会在服务器这边存储任何状态信息,是可以随时终止的,不会对服务器产生副作用

        在遍历的过程中,如果key发生变化(增加key,删除key,和修改key),可能会导致遍历时key被重复遍历或者遗漏,这点务必在开发中考虑

语法

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

  • 时间复杂度:O(1)
  • 返回值:下一次 scan 的游标(cursor)以及本次得到的键。这个游标或许并没有什么直观的规律,你只用了解下一次遍历的值是这个返回值的第一行数据即可。
  • count:限制一次遍历可以获得多少个元素,如果不写的话,默认是10个。有时候,携带属性count,返回结果也并不一定准确,例如设置count 3,但是有可能会返回四个key。
  • Type:表示你想要获取的key的类型,如果不加,那么默认就获取所有的类型。
  • 渐进式遍历是可以随时终止的,不会对服务器产生影响。

示例

        首先插入10个数据:

        使用scan来进行遍历:

        其中7是下一次遍历的位置,继续遍历:

        返回0代表遍历结束。

        指定count继续尝试:

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

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

相关文章

【docker】docker-compose.yml 语法详解

文章目录 一、相关文章二、基本概念三、Docker Compose语法介绍1、version2、Servicesimagebuildportsnetworksvolumesenvironmentdeploydepends\_oncommandrestart 3、networks 使用docker 网络驱动类型 4、volumes 使用 四、和环境变量文件.env结合使用五、使用示例1、基本使…

STL演讲比赛流程管理系统

很难,一边看视频&#xff0c;一边思考了好多天 speaker.h #pragma once//防止头文件重复包含 #include<iostream> using namespace std;//设计选手类 class Speaker{public:string m_Name;//姓名 double m_Score[2];//double带了浮点,防止重复 2代表可能有人是两轮…

字节跳动官方出品AI,白嫖使用GPT4!

关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; 作者简介&#xff1a;魔都技术专家兼架构&#xff0c;多家大厂后端一线研发经验&#xff0c;各大技术社区头部专家博主&#xff0c;编程严选网创始人。具有丰富的引领团队经验&#xff0c;深厚业务架…

《CSS 简易速速上手小册》第8章:CSS 性能优化和可访问性(2024 最新版)

文章目录 8.1 CSS 文件的组织和管理8.1.1 基础知识8.1.2 重点案例&#xff1a;项目样式表结构8.1.3 拓展案例 1&#xff1a;使用BEM命名规范8.1.4 拓展案例 2&#xff1a;利用 Sass 混入创建响应式工具类 8.2 提高网页加载速度的技巧8.2.1 基础知识8.2.2 重点案例&#xff1a;图…

alist基本用法@文档阅读@挂载网盘@网盘webdav挂载

文章目录 alist官网alist网站风格说明alist软件版本 安装和启动使用必看文档&#x1f47a;alist for android版本启动alist网页挂载阿里云盘open获取阿里云令牌 主页检查挂载情况 常用页面以配置挂载列表管理配置页面 FAQ可能遇到的错误检查服务重启前后alist的动作(自动挂载)a…

django中实现观察者模式

在Django中实现观察者模式&#xff0c;你可以利用Django的信号&#xff08;Signals&#xff09;系统。Django的信号提供了一种发布/订阅模型&#xff0c;允许解耦应用程序组件之间的交互。一个组件可以发送一个信号&#xff0c;而其他组件可以监听这个信号并响应它。 下面是如…

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Vue源码系列讲解——虚拟DOM篇【四】(优化更新子节点)

目录 1. 前言 2. 优化策略介绍 3. 新前与旧前 4. 新后与旧后 5. 新后与旧前 6. 新前与旧后 7. 回到源码 8. 总结 1. 前言 在上一篇文章中&#xff0c;我们介绍了当新的VNode与旧的oldVNode都是元素节点并且都包含子节点时&#xff0c;Vue对子节点是 先外层循环newChil…

最佳视频转换器软件:2024年视频格式转换的选择

我们生活在一个充满数字视频的世界&#xff0c;但提供的内容远不止您最喜欢的流媒体服务目录。虽然我们深受喜爱的设备在播放各种自制和下载的视频文件方面变得越来越好&#xff0c;但在很多情况下您都需要从一种格式转换为另一种格式。 经过大量测试&#xff0c; 我们尝试过…

Tiny Http源码解析

相关概念 源码 HTTP CGI getsockname() 函数说明 accept_request: 处理从套接字上监听到的一个 HTTP 请求&#xff0c;在这里可以很大一部分地体现服务器处理请求流程。bad_request: 返回给客户端这是个错误请求&#xff0c;HTTP 状态吗 400 BAD REQUEST.cat: 读取服务器上某…

《CSS 简易速速上手小册》第5章:CSS 动画与过渡(2024 最新版)

文章目录 5.1 CSS 过渡基础&#xff1a;网页的微妙舞步5.1.1 基础知识5.1.2 重点案例&#xff1a;按钮悬停效果5.1.3 拓展案例 1&#xff1a;渐变显示导航菜单5.1.4 拓展案例 2&#xff1a;动态调整元素大小 5.2 关键帧动画&#xff1a;编排你的网页芭蕾5.2.1 基础知识5.2.2 重…

ctfshow-web21~28-WP

爆破(21-28) web21 题目给了一个zip文件,打开后解压是爆破的字典,我们抓包一下网址看看 发现账号和密码都被base64了,我们发送到intruder模块,给爆破的位置加上$符圈住 去base64解码一下看看格式

golang常用库之-操作数据库ORM:GORM 包介绍 | 一些 GORM 提示和注意事项

文章目录 golang操作数据库ORM&#xff1a;GORM 包介绍及实战一、什么是GORM 包二、GORM基本使用官方快速开始demo 一些 GORM 提示和注意事项 参考 golang操作数据库ORM&#xff1a;GORM 包介绍及实战 一、什么是GORM 包 官网&#xff1a;https://gorm.io/ github&#xff1a…

【PyQt】09-控件提示信息、Lable标签

文章目录 前言一、控件提示信息1.1 代码1.2 解释 < b >在HTML标签中的作用1.3 添加按键后的代码运行结果 二、QLabel控件介绍2.1 内容2.2 常用的事件2.3 代码结果展示 总结 前言 1、控件提示信息 2、QLabel控件介绍 一、控件提示信息 关键点在于 效果如图所示&#x…

VR和AR傻傻分不清,一句话给你讲明白。

不说废话&#xff0c;直接说结论&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;和增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;。如果现实是A&#xff0c;虚拟是B&#xff0c;那么VRB&#xff0c;ARAB&#xff0c;就这简单&…

大模型实战营第二期——3. 基于 InternLM 和 LangChain 搭建你的知识库

github地址&#xff1a;InternLM/tutorial-书生浦语大模型实战营文档地址&#xff1a;基于 InternLM 和 LangChain 搭建你的知识库视频地址&#xff1a;基于 InternLM 和 LangChain 搭建你的知识库Intern Studio: https://studio.intern-ai.org.cn/console/instance动手学大模型…

2-8 单链表+双链表+模拟栈+模拟队列

今天给大家用数组来实现链表栈和队列 单链表&#xff1a; 首先要明白是如何用数组实现&#xff0c; 在这里需要用到几个数组&#xff0c;head表示头节点的下标&#xff0c;e[i]表示表示下标为i的值&#xff0c;ne[i]表示当前节点下一个节点的下标。idx表示当前已经用到那个点…

HTTP 协议在互联网中的作用是什么?

首先&#xff0c;HTTP 协议是互联网上应用最为广泛的一种网络协议。它被设计为无状态的&#xff0c;意味着服务器不会为每个请求保持状态。HTTP 协议的请求方法有 GET、POST、PUT、DELETE 等&#xff0c;分别对应着不同的操作。例如&#xff0c;GET 方法用于请求数据&#xff0…

Git的基础操作指令

目录 1 前言 2 指令 2.1 git init 2.2 touch xxx 2.3 git status 2.4 git add xxx 2.5 git commit -m xxxx 2.5 git log及git log --prettyoneline --all --graph --abbrev-commit 2.6 rm xxx 2.7 git reset --hard xxx(含小技巧) 2.8 git reflog 2.9 mv xxx yyy 1…

【BIAI】Lecture 14 - Sleep and Dreaming

Sleep and Dreaming 专业词汇 pons 延髓 parietal cortex 顶叶皮层 limbic system 边缘系统 temporal cortex 颞叶皮层 dorsolateral prefrontal cortex 背外侧前额叶皮层 pineal gland 松果体 Suprachiasmatic Nucleus 视交叉上核 课程大纲 Sleep stages awake无眼动睡眠&am…