Redis渐进式遍历:安全高效的键扫描术

软考系统架构设计师论文涉及知识点之Redis(16) 阅读详情

之前在核心指令讲解中提到

keys *  一次性的把整个redis中所有的key都获取到

这个操作是比较危险的,可能一下子得到太多的key,阻塞redis服务器

通过渐进式的遍历,就可以做到,既能够获取到所有的key,同时又不会卡死服务器

所以渐进式遍历是为了避免阻塞服务器

渐进式:不是一个命令,把所有的key都拿到,而是每执行一次命令,只获取到其中的一小部分,这样的话能够保证当前这一次操作不会太卡,要想得到所有的key就需要多次遍历了,多次执行渐进式遍历命令

渐进式遍历其实是一组命令,这一组命令的使用方法是一样的

其中代表命令scan

Redis 的 scan命令是一种用于迭代遍历 Redis 数据库中键的命令,它可以逐步迭代所有键(或指定模式的键),相比 KEYS 命令更适合在生产环境中使用。

用法:

这个match pattern就是之前讲的key命令中的匹配模式,对于命令key *可以忘记了,以后用这个

count就是限制一次遍历能够获取到多少个元素,默认是10

此处的count只是给redis服务器一个”提示/建议“,写入的count和实际返回的key的个数不一定是完全相同的,但是也不会差很多(注意redis中不是精确值,Redis 会根据内部数据结构调整实际返回数量,mysql中的limit是精确的)

还有一个选项type,这个是redis6+才支持的,可以指定返回的键的类型

注意:如果命令返回0了就说明遍历结束了

注意这两张图片是连在一起的,看返回值,返回是告诉你下一次要从哪里开始遍历,这个程序员也看不懂,redis服务器懂就行,只需要知道下一次遍历从这里开始就行

简单来说之前就是我一次如果遍历key *,如果我遍历一半了之后,想要取消是取消不了的,服务器一股脑的从头到尾的扫描,即使你客户端断开连接,而scan不是这样,遍历是可以随时中断的,你只需要记录每次的光标移动到哪,你过一会再使用也行

注意:渐进式遍历scan虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加/修改/删除等),可能会导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑

虽然scan比keys要好点,但是使用的时候也还是有很多的注意事项的,很多的出错的可能的

真的需要遍历redis中所有的key吗???

mysql中有一个重要的概念:database

一个mysql服务器上可以有很多个database,一个database上可以有很多个表,mysql中可以随心所欲的创建/删除 数据库

在前面的学习过程中,感觉好像就是上来就是key value  key  value

其实redis中也是有database这样的概念的,只不过不像mysql那样随意

默认redis给咱们提供了16个数据库 0-15

这16个数据库中的数据是隔离的,相互之间不会有影响

默认情况下使用的数据库就是0号的

实际使用redis很少会关注到数据库,一般都是默认使用0号就可以了

flushdb:删除当前数据库中所有的key

flushall:删除所有数据库中所有的key

(注意以后在公司里千万不敢乱用!!!尤其是在生产环境上)

身处哪个数据库就返回哪个数据库的key个数

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注 使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)... 阅读详情

相关推荐

保姆级教程:手把手配置MAX9295/9296 GMSL2-CSI2链路,搞定4LAN/1LAN模式与常见调试

本文提供MAX9295/9296 GMSL2-CSI2链路的详细配置教程,涵盖4LAN和1LAN模式的硬件连接、寄存器配置及调试技巧。通过实战案例和代码示例,帮助开发者快速实现高带宽视频传输,解决常见问题如信号同步和功耗优化,适用于车载摄像头和机器人视觉系统开发。

weixin_42561143的博客 434

Flink 学习日志 03:自定义一个SourceFunction,完成对Redis中数据的读取

本文介绍了在Flink中自定义SourceFunction读取Redis数据的完整流程:通过Jedis客户端连接WSL2中的Redis服务,编写RedisSource实现循环读取所有Key-value并逐条输出,结合Thread.sleep()实现每秒一条的流式效果。关键步骤包括环境准备、添加Jedis依赖、配置IDEA运行时加载provided依赖,并注意生产环境中应避免使用阻塞的keys *,改用scan命令。最终实现动态读取、实时打印,验证了Flink与Redis的数据集成能力。

木木的学习笔记 418

从零开始:kohya_ss环境部署与LoRA/SDXL模型训练实战指南

本文提供了一份详细的kohya_ss环境部署与模型训练实战指南。从零开始,手把手教你使用Conda创建虚拟环境、安装依赖并启动Web GUI界面。核心内容涵盖高质量数据集的准备方法,并重点解析了如何使用kohya_ss工具进行LoRA模型和SDXL模型的微调训练,包括关键参数配置与常见报错解决方案,帮助初学者快速上手AI绘画模型定制。

weixin_29162439的博客 535

Spring Boot 工程通用能力建设:声明式事务定制与 Redis 缓存实践

本文探讨Spring Boot中声明式事务的进阶实践,通过解耦“切点”与“事务属性”,实现灵活控制。核心包括:基于方法名的只读规则(如get*、find*自动设为只读),组合事务属性源确保@Transactional注解优先于命名规则,以及自定义切点实现事务统一织入。该方案提升代码可维护性,避免误写,同时支持特殊场景覆盖,构建更健壮的事务治理体系。

BADAO_LIUMANG_QIZHI的博客 243

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路

本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。

npy199331的博客 1939

Docker多阶段构建实现基于Alpine的Redis的编译安装

【代码】Docker多阶段构建实现基于Alpine的Redis的编译安装。

一直在努力学习的菜鸟 316

使用Xpath语法爬取豆瓣读书Top250

使用Xpath语法爬取豆瓣读书Top250 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: # -*- coding: utf-8 -*- """ Created on Thu Apr 30 18:35:17 2020 @author: ASUS """ import requests import csv fr...

weixin_43987253的博客 2081

Redis 数据类型全解 - ZSet:两个编码,七种玩法(五)

Redis ZSet 是唯一支持按可变分值有序且成员可快速定位的数据结构,适用于排行榜、延迟队列、滑动窗口限流等场景。其核心价值在于用 score 表达业务语义,但使用不当易引发性能问题:轮询导致 CPU 飙升、全量查询拖垮实例、非原子操作致超发。关键陷阱包括 ZRANGE 0 -1 误用为分值范围、GT/LT 条件逻辑误解、双精度精度上限导致分值冲突。正确使用需掌握原子写入(如 ZADD GT)、避免轮询、合理控制范围,并注意编码类型对复杂度的影响。

IT规划师 513

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 49

LDRA Testbed软件静态分析_常见问题及处理

通过前面的几篇文章,LDRA Testbed软件静态分析的内容基本讲解完了,本篇文章将针对使用Testbed进行软件静态分析的常见问题进行介绍。 到此为止,LDRA Testbed软件静态分析的内容已经全部讲完,如果有问题,欢迎私信提问(不经常登录,回复可能不及时,见谅)。下一篇文章将开始讲解如何使用Testbed进行单元测试。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 2586

redis

AOF 文件体积更大,恢复慢,因为恢复的时候要逐条重放命令。AOF 还有重写机制,用来消除冗余,比如同一个 key 连续 set a、set b、set c、set d,重写之后就只保留一条 set key d,精简文件。消息会被分发到每一个实例的队列,所有实例监听自己的队列,收到消息之后,各自删除本机 Caffeine 里面对应的本地缓存,实现一处修改、全部实例本地缓存失效。HyperLogLog 不存原始数据,基于概率算法估算独立数量,内存极小,支持海量 UV 统计,缺点是结果有微小误差,拿不到明细。

2401_84390420的博客 167

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

RabbitMQ 消费端幂等:唯一索引、条件更新、Redis 去重三种方案的真实代价

MQ 只承诺至少投递一次,重复消息只能消费端自己吃掉。这篇对比唯一索引、条件更新、Redis 短路三种去重方案在 AI 任务场景下的实际代价,附三个踩过的坑。

zhangpan 187

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SQLite 是什么?和 MySQL、Redis 有什么区别,项目中应该怎么选?

SQLite 是轻量级嵌入式关系型数据库,无需独立服务,直接通过文件存储数据,适合本地工具、桌面应用、移动端离线数据及单机轻量业务。与 MySQL 相比,它部署简单但并发写入受限;与 Redis 不同,它支持完整 SQL 与事务,适用于结构化数据持久化。三者可协同使用:MySQL 处理核心业务,Redis 实现高速缓存与计数,SQLite 降低部署复杂度。选型应基于场景需求,而非技术偏好。

栈外手记|2018 年起深耕后端开发。跳出代码栈,分享技术、项目踩坑与行业思考,看见技术之外更多可能。 336

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

如何在本地 Docker 容器中运行 Redis,并使用 Redis Insight 和 Redis CLI 进行管理

本文教程介绍了如何使用Docker本地运行Redis服务器与RedisInsight,实现数据的可视化管理。通过RedisInsight和RedisCLI,学习了对哈希、字符串、列表、集合、有序集、流及JSON等数据类型的增删改查(CRUD)操作,涵盖HSET、GET、SADD、XADD等核心命令,帮助开发者高效掌握Redis基本用法。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 272

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RedisLockRegistry redis分布式锁(加锁/续期)使用

如果后续锁竞争更重,或者需要更完善的 Watchdog、公平锁、Pub/Sub 唤醒,可以逐步演进到 Redisson。所以它不是检测“业务方法有没有返回”,而是检测。同一个 lockKey,多次。,key 就是你传入的锁名。对象,不会重复 new。

weixin_46136610的博客 203

Redis 从 0 到 1(二十七):JSON 体积是 Protobuf 的 3.7 倍?3 种序列化的 Go 基准测试

缓存对象直接用 json.Marshal,1 亿条 key 多花 20G 内存和 3 倍带宽。本文对 JSON / MessagePack / Protobuf 做 Go 基准测试(体积、编解码耗时、CPU),给出不同场景的选型表和统一序列化封装。

2501_92769340的博客 177

Redis 从 0 到 1(二十五):连接池又打满了——PoolSize 公式、泄漏排查与 PoolStats

流量一涨就 connection pool timeout,加 PoolSize 治标不治本——可能是连接泄漏。本文给出 PoolSize 计算公式(QPS×RT),用 PoolStats 的 4 个指标判断池太小还是没归还,并演示典型泄漏代码与修复。

2501_92769340的博客 587

Java开发中,redis除了缓存和分布式锁,还有哪些实际业务用到?

很多 Java 后端开发小伙伴聊到 Redis,脱口而出的就是缓存和分布式锁。这两个场景确实是项目中最常用的,网上相关文章也非常多。但 Redis 真正强大的地方,在于它内置了丰富多样的数据结构,很多高并发业务需求,利用这些原生结构就能简单高效实现,还能极大减轻 MySQL 的压力。本文整理了生产项目中落地较多、面试也经常问到的 Redis 业务场景,每个场景包含业务需求、实现思路、核心 Java 示例代码、优点以及生产环境需要注意的局限和坑点,最后补充重要避坑提醒和选型思路。

2401_86983677的博客 280

Redis 运维实战与排错

本文深入解析Redis核心原理与生产运维要点:单线程模型的性能优势与阻塞风险、内存编码对bigkey的影响、RDB/AOF持久化的权衡、过期淘汰策略配置、高可用三形态(主从→哨兵→Cluster)的适用场景。结合实战配置与排错清单,强调合理设置maxmemory、避免bigkey、善用混合持久化,并指出在跨账号、合规或定制需求下仍需自建,其余场景推荐使用ElastiCache托管服务。

weixin_42211117的博客 157

Redis 键管理命令详解(C++ 版):EXISTS/DEL/KEYS/TTL/TYPE

这是《Redis C++ 实战笔记》系列的第 02 篇。上一篇立了调用约定,从这一篇开始进入正题。先讲"键管理"——它不属于任何一种数据类型,但它操作的是键本身,后面每一种类型都会用到。

wbs_scy的博客 180

30. 技术专题-‌应用框架组件-缓存-Redis

你现在打开项目代码,搜索,匹配到的地方是不是都有这么几行——查缓存、写缓存、删缓存?你对这套操作早已烂熟于心,闭着眼都能写出来。可你有没有在某一个瞬间问过自己:缓存设了 30 分钟过期,那第 31 分钟会发生什么?如果那一秒恰好有一万个请求同时涌进来,Redis 扛得住吗?数据库扛得住吗?这篇文章,正是为了回答那些你"隐约觉得重要,但又没人系统讲过"的问题。我们不谈虚的,就从你项目中那最常用的出发,把 Redis 真正吃透。

princemilo的博客 391

Redis 缓存机制:缓存一致性、穿透、击穿与雪崩

Redis缓存通过CacheAside模式减少数据库压力,提升读取性能。核心问题包括缓存一致性、穿透、击穿与雪崩。更新数据库后删除缓存可缓解不一致,但存在竞态风险;缓存穿透可通过空值缓存或布隆过滤器防御;击穿可用互斥锁或逻辑过期应对;雪崩则需随机TTL、高可用部署及限流降级。命中率、延迟等指标需持续监控,关键业务应避免依赖缓存强一致性。

Joy T的博客 158

多存储协同架构:JPA + MyBatis + Elasticsearch + Redis 的职责分工与通用实现

本文阐述了在高并发订单系统中,通过JPA、MyBatis、Elasticsearch与Redis的多存储协同架构实现职责分离:JPA负责事务性写操作与简单查询;MyBatis处理复杂联查与报表统计;Elasticsearch承载海量数据下的多维检索与聚合;Redis用于缓存、防回滚暂存及分布式锁。各存储分工明确,通过异步同步机制联动,兼顾一致性、性能与扩展性,构建高效稳定的系统架构。

BADAO_LIUMANG_QIZHI的博客 233

WordPress 启用 Redis 对象缓存后仍慢或出现陈旧数据:先分清页面缓存 vs 对象缓存,再核连接、前缀与 drop-in

启用 Redis 对象缓存之后,站点仍然慢,或改完选项/菜单/商品后前台还是旧数据——这和近期写过的固定链接 404、登录 Cookie、白屏 Fatal、WP-Cron 堆积、HTTPS 混合内容、数据库连不上、Woo 支付 webhook、媒体上传失败不是一类故障。也别和「只开了页面缓存 / CDN 仍慢」混为一谈:页面缓存管的是整页 HTML;对象缓存管的是跨请求的 options、posts、meta 等对象。Redis drop-in 只是让持久化,自动变成全站页面缓存。

20年技术经验|专注小程序+外贸独立站|已服务500家企业,分享创业中有趣的产品和技术经验。 1369
上一篇: 揭秘Redis五大不常用数据类型
下一篇: 数据结构与算法简介:充分理解二者关系
Fcw0551
博客等级 码龄2年 330粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值