【Redis】渐进式遍历数据库管理

2023-11-20 21:12

本文主要是介绍【Redis】渐进式遍历数据库管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 渐进式遍历
    • scan
  • 数据库管理
    • 切换数据库
    • 清除数据库
  • 获取当前数据库key的个数

渐进式遍历

Redis使⽤scan命令进⾏渐进式遍历键,进⽽解决直接使⽤keys获取键时能出现的阻塞问题。每次scan命令的时间复杂度是O(1),但是要完整地完成所有键的遍历,需要执⾏多次scan,每执行一次命令,只获取其中的一小部分,这样可以保证当前这一次操作不会阻塞redis服务器image-20231022110525573

  • ⾸次scan,光标设置为0,意味着这次遍历是从头开始获取,scan的返回值的前半部分1),是告诉你下次遍历光标要从哪个位置开始,2)才是真正遍历到的key的内容
  • 当scan返回的下次位置为0时,遍历结束

注意:此处的cursor不能理解为下标,并不是一个连续递增的整数,仅仅是一个字符串


scan

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

语法:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type] 
  • MATCH pattern:匹配满足格式的key
  • COUNT count:限制这一次遍历能够获取到多少个元素
    • 此处的count和MySQL当中的limit不同,前者只是给redis服务器一个提示/建议,写入的count和实际返回的key的个数不一定完全相同,后者是精确的
  • Type type:表示要遍历获取什么数据类型的value,redis的key都是string,但是value的类型不一样!

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

注意:渐进性遍历scan虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏

image-20231024203912951

结果1):表示下次scan光标的位置 结果2):这次遍历拿到的key有哪些


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


数据库管理

Redis提供了⼏个⾯向Redis数据库的操作,分别是dbsize、select、flushdb、flushall命令

切换数据库

select dbIndex 

Redis只是⽤数字作为多个数据库的实现。Redis默认配置中是有16个数据库,各个数据库互相不会有影响。select0操作会切换到第⼀个数据库,select15会切换到最后⼀个数据库,0号数据库和15号数据库保存的数据是完全不冲突的,有各⾃的键值对。默认情况下,我们处于数据库0

image-20231024204414958

image-20231022110813118

Redis中虽然⽀持多数据库,但是不是特别建议使⽤多数据库特性。真的需要完全隔离的两套键值对,更好的做法是维护多个Redis实例,⽽不是在⼀个Redis实例中维护多数据库,因为本⾝Redis并没有为多数据库提供太多的特性,其次⽆论是否有多个数据库,Redis都是使⽤单线程模型,所以彼此之间还是需要排队等待命令的执⾏。同时多数据库还会让开发、调试和运维⼯作变得复杂。所以实践中,始终使⽤数据库0其实是⼀个很好的选择


清除数据库

flushdb/flushall命令⽤于清除数据库

  • flushdb只清除当前数据库当中所有的key
  • flushall会清除所有数据库当中所有的key
FLUSHDB [ASYNC | SYNC]  //ASYNC:异步的  SYNC:同步的

获取当前数据库key的个数

DBSIZE

image-20231026221636487

这篇关于【Redis】渐进式遍历数据库管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/397471

相关文章

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi