当前位置: 首页 > news >正文

Redis:渐进式遍历

🌈 个人主页:Zfox_
🔥 系列专栏:Redis

🔥 渐进式遍历

Redis使⽤scan命令进⾏渐进式遍历键,进⽽解决直接使⽤keys获取键时可能出现的阻塞问题。每次scan命令的时间复杂度是O(1),但是要完整地完成所有键的遍历,需要执⾏多次scan。整个过程如图2-29所⽰。

图2-29scan命令渐进式遍历

在这里插入图片描述

  • ⾸次scan从0开始.
  • 当scan返回的下次位置为0时,遍历结束.

🦋 SCAN

以渐进式的⽅式进⾏键的遍历。

语法:

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

返回值:下⼀次scan的游标(cursor)以及本次得到的键。

这里面提到了几个比较重要的概念,首先是 cursor,这个内容其实就是前面说的光标,本质上就是对于服务器来说的一种索引,这个光标的值是多少不重要,也不需要知道,只需要传递给服务器即可

第二个表示的是 pattern,这个和 keys 命令是一样的,就是类似于正则表达式的规则,进行筛选某些特定的内

第三个表示的是 count,表示的是一次要获取多少个元素,这里的 count 表示的更多的是一种提示和建议,只是对于服务器的一种建议,而至于服务器采取这个建议与否,就不一定了

第四个说的是类型,对于 Redis 当中,key 值表示的都是 string,但是 value的值却是五花八门,所以需要指定对应的类型,下面演示使用场景

首先插入几个key值:

127.0.0.1:6379> mset key1 111 key2 222 key3 333 key4 444 key5 123 key6 eee key7 432 key8 eee key9 999
OK
127.0.0.1:6379> keys *
1) "key9"
2) "key8"
3) "key6"
4) "key7"
5) "key4"
6) "key5"
7) "key1"
8) "key3"
9) "key2"

而如果我们使用的是scan命令:

127.0.0.1:6379> scan 0
1) "0"
2) 1) "key8"2) "key5"3) "key1"4) "key9"5) "key4"6) "key6"7) "key3"8) "key7"9) "key2"

此时会返回给一个下标,这个下标就是下次要进行遍历的索引,我们此时需要再次对这个下标进行查找,而特殊的是,如果这个下标是0,表示的是此次搜索已经结束了,下面我通过 count 的限制来进行演示效果:

第一次查找:

127.0.0.1:6379> scan 0 count 3
1) "2"
2) 1) "key8"2) "key5"3) "key1"

此时展示的下标是2,下面进行第二次查找:

127.0.0.1:6379> scan 2 count 3
1) "13"
2) 1) "key9"2) "key4"3) "key6"

下面进行第三次查找:

127.0.0.1:6379> scan 13 count 3
1) "0"
2) 1) "key3"2) "key7"3) "key2"

此时下标是0,表示的是已经查找完毕了,已经结束了

如上所示就是查找的基本过程

🦋 渐进式遍历的增加修改删除

在渐进式遍历中,虽然解决了阻塞的问题,但是一个比较严重的问题是,如果在遍历期间的键有发生变化,那其实这件事是比较严重的事,这点其实和 C++ 的 STL 是比较相似的

在 C++ 的 STL 中,也有过类似的说法,比如在进行遍历的时候,如果在途中进行了增加修改和删除,那么可能会产生迭代器失效的问题,在Redis中,虽然不至于像 C++ 中直接报错,但是也可能会导致遗漏的情况出现

因此最好在 Redis 进行渐进式遍历的时候不要对其进行任何的修改

🦋 database

在 MySQL 中,存在一个比较重要的概念,database

那么在 Redis 中,似乎没有这样的概念,那其实这样的场景已经提前设置好了,在 MySQL 中的 Redis 已经被设置为 16 个,并且用户是不能对它进行增加或者删除,每一个数据库和数据库之间也是处于隔离的状态

不过,在实际的 Redis 使用中,其实很少会出现这样的使用场景,因此默认使用 0号 Redis 数据库就可以了

🔥 数据库管理

Redis提供了⼏个⾯向Redis数据库的操作,分别是dbsizeselectflushdbflushall命令,本机将通过具体的使⽤常⻅介绍这些命令。

🦋 切换数据库

select dbIndex

许多关系型数据库,例如MySQL⽀持在⼀个实例下有多个数据库存在的,但是与关系型数据库⽤字符来区分不同数据库名不同,Redis只是⽤数字作为多个数据库的实现。Redis默认配置中是有16 个数据库。select0操作会切换到第⼀个数据库,select15会切换到最后⼀个数据库。0号数据库和 15号数据库保存的数据是完全不冲突的(如图2-30所⽰),即各种有各⾃的键值对。默认情况下,我们处于数据库0。

图2-30Redis管理的数据库

在这里插入图片描述
在这里插入图片描述

🦋 清除数据库

flushdb/flushall命令⽤于清除数据库,区别在于flushdb只清除当前数据库,flushall会清楚所有数据库。

在这里插入图片描述

🔥 共勉

😋 以上就是我对 Redis:渐进式遍历 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉
在这里插入图片描述


文章转载自:

http://TboyP2vj.nmfmL.cn
http://HNCoLDDX.nmfmL.cn
http://DIcZ9ipb.nmfmL.cn
http://tOIBxYKP.nmfmL.cn
http://wPOPZzqi.nmfmL.cn
http://q37EQ5hp.nmfmL.cn
http://JQ8fkYI4.nmfmL.cn
http://p8NhGLH0.nmfmL.cn
http://l7mJTGZS.nmfmL.cn
http://X6CkgcM7.nmfmL.cn
http://kqkJwqvi.nmfmL.cn
http://Bty15ZQJ.nmfmL.cn
http://78GuuYvq.nmfmL.cn
http://sZAXHNnL.nmfmL.cn
http://v7FqTomm.nmfmL.cn
http://WQc4Xwru.nmfmL.cn
http://OyzrElZE.nmfmL.cn
http://8wuZHUy8.nmfmL.cn
http://HGNj0vgu.nmfmL.cn
http://IkUO3kc4.nmfmL.cn
http://wG2Z7N3M.nmfmL.cn
http://HLPs9XZh.nmfmL.cn
http://mqMQxxM4.nmfmL.cn
http://P1lEvCcZ.nmfmL.cn
http://fsHeoVvT.nmfmL.cn
http://jZscMZEk.nmfmL.cn
http://QgYTkPf4.nmfmL.cn
http://zzGOMZPF.nmfmL.cn
http://EQk1HMVT.nmfmL.cn
http://uYmNaBj0.nmfmL.cn
http://www.dtcms.com/a/245529.html

相关文章:

  • vue3 数据过滤方法
  • Linux笔记之Ubuntu22.04安装 fcitx5 输入法
  • 观点 | 科技企业到了品牌建设的历史性窗口期
  • PRIMES“中国校准实验室”正式运营,携手东隆科技共筑精准测量新标准
  • ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?
  • [免费]微信小程序音乐播放器(爬取网易云音乐数据)(node.js后端)【论文+源码】
  • 智能眼镜销量暴涨 800%,科技革新引发消费热潮
  • docker compose安装Prometheus、Grafana
  • VAS1082Q奇力科技LED驱动芯片固定电流值用于车用市场
  • 卡通幼儿园教育通用可爱PPT模版分享
  • Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
  • 三大能力升级,为老项目重构开辟新路径
  • WPF调用Python心率监测脚本解决方案
  • 装饰器模式(Decorator Pattern)
  • K8s 指标收集方案对比
  • 【深尚想】M74VHC1GT08DTT1G逻辑芯片安森美ON 工业/物联网首选 电子元器件解析
  • 基于springboot视频及游戏管理系统+源码+文档
  • Next.js + Supabase = 快速开发 = 高速公路
  • 华为云物联网系统开发(纯云端)外包方案及项目需求说明书
  • 【生产实践】DolphinScheduler集群MySQL数据源切换终极指南|附生产环境避坑手册
  • AbMole| Angiotensin II human(M6240;血管紧张素Ⅱ)
  • 数量关系与资料分析【总结】
  • Android7 Input(十一)App View InputEvent事件分发
  • 全志A33安卓6.0添加支持usb摄像头动态热插拔
  • 【Docker 04】image - 镜像
  • 单片机中面向对象的思维
  • 从零开始学Python(2)——流程控制语句和五种容器
  • 《射频识别(RFID)原理与应用》期末复习 RFID第四章 数据校验和防碰撞算法(知识点总结+习题巩固)
  • js判断手机操作系统(ios、安卓、华为)
  • FastDFS分布式存储