【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在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处