2024.1.3 关于 Redis 渐进式遍历 和 数据库管理命令
目录
引言
渐进式遍历
SCAN 命令
数据库管理命令
切换数据库
获取数据库 key 个数
删除数据库所有 key
同步删除 SYNC
异步删除 ASYNC
阅读下述文章之前建议点击下方链接熟悉 keys 命令的用法和特点
Redis 全局通用命令
渐进式遍历
- keys * 命令
- 一次性将 Redis 中所有的 key 都获取到
注意:
- 执行该命令 十分危险,可能会导致一下子得到太多 key,从而阻塞 Redis 服务器
- 相较于 keys * 命令
- 渐进式遍历,可以做到获取到所有的 key 的同时又不会阻塞 服务器
通俗理解:
- 不是通过一个命令,便将所有的 key 都获取到
- 而是每执行一次命令,便获取到其中的一小部分 key,以此保证当前这次操作不会阻塞 Redis 服务器
- 要想得到所有的 key ,仅多执行几次渐进式遍历命令来遍历 Redis 中的 key 即可
- 类似于 化整为零 的思想
SCAN 命令
- 渐进式遍历的代表命令
语法:
scan cursor [MATCH pattern] [COUNT count] [TYPE type]
- cursor 代表光标,而 光标便指向了当前遍历的位置
注意:
- 此处的 cursor 不能理解成 下标
- cursor 并不是一个连续递增的整数,仅仅只是一个字符串
- 程序员 和 Redis 客户端是不认识光标(cursor)这个概念的
- 只有 Redis 服务器知道光标(cursor)值 所对应的元素位置
- 我们要做的只能是将返回的光标(cursor)值写入到下次遍历的 scan 命令中,从而获取下次需遍历到的 key
可选项解释
- [MATCH pattern] 和前面介绍过的 keys 命令中的 pattern 是一样的
- pattern 为包含特殊符号的字符串,其存在的意义是去描述 另外的字符串长啥样的
? 匹配任意一个字符 * 匹配 0 个或者多个任意字符 [ab] 只能匹配到 a b ,别的都不行 相当于给出固定的选项 [^ae] 只有 a、e 匹配不了 其他的都能匹配 [a-e] 匹配 a - e 这个范围内的字符 包含两侧边界
- [COUNT count] 用来限制这一次遍历能获取到的元素个数,默认为 10 个
注意:
- 此处的 count 与 MySQL 中的 limit 不同
- 首先此处的 count 值只能对 Redis 服务器起到一个 "提示" 或 "建议" 的效果,并不代表 Redis 服务器只能返回 count 个 key
- 即填写的 count 值 和 实际返回的 key 的个数不一定完全相同,但是也不会差很多!
- 但对于 MySQL 中的 limit 来说,其给出的值是多少,则该 sql 语句便十分精确地返回多少行数据
- Redis 中的 key 均为 String 类型,但是 value 却有很多种不同的类型
- [TYPE type] 可利用该选项来控制返回 key 的 value 类型
实例理解
- 限制一次遍历仅能获取 3个元素
注意点一:
- 渐进式遍历,在遍历过程中,Redis 服务器不保留任何状态信息
- 所以此处的遍历 是可以随时进行终止的,因为其不会对 Redis 服务器产生任何影响
注意点二:
- 渐进式遍历 虽然解决了阻塞的问题
- 但如果在遍历期间 key 有所变化(增加、修改、删除),这均可能导致遍历时 key 的重复遍历或者遗漏
- 这点务必在实际开发中考虑!
数据库管理命令
- MySQL 中有一个重要的概念 ——> database(数据库)
- 一个 MySQL 服务器上可以有很多个 database,一个 database 上可以有很多个 table
- MySQL 上可以随心所欲的 创建、删除 database 和 table
- Redis 中也有 database 的概念,只不过不像 MySQL 那样随意
- Redis 中的 database 均是现成的,即用户不能创建新的数据库,也不能删除已有的数据库
- Redis 默认给我们提供了 16 个数据库,编号为 0-15
- 这 16 个数据库之间具有隔离性,即这些数据库不会相互影响
- 默认情况下使用的数据库就是 0号数据库
切换数据库
- 使用下方命令来切换数据库
select dbIndex
注意:
- 在实际 Redis 的使用中很少会关注到数据库,一般都是默认使用 0号数据库
实例理解
获取数据库 key 个数
- 使用下方命令来获取到当前数据库中 key 的个数
dbsize
实例理解
删除数据库所有 key
- 使用下方命令来删除 当前数据库 或 全部数据库 的所有 key
FLUSHDB [ASYNC | SYNC] 删除当前数据库中的所有 keyFLUSHALL [ASYNC | SYNC] 删除全部数据库中的所有 key
- 选项 [ASYNC | SYNC] 为 [异步 | 同步] 的意思
同步删除 SYNC
- Redis 会在删除数据前,先将数据同步到磁盘上的持久化文件(如 RDB文件)
- 这意味着在命令执行完成后,你可以确保数据已经被持久化到磁盘上
- 即使 Redis 服务在之后重启,也能够从磁盘上的数据文件中恢复数据
优点:
- 数据持久性高
缺点:
- 会引起一定的性能开销,因为要等待数据写入磁盘
异步删除 ASYNC
- Redis 会在后台异步删除数据,而不等待数据同步到磁盘上
- 这意味着在命令执行完成后,数据可能还没有被持久化到磁盘上
- 这样的操作通常会更快,因为不需要等待磁盘写入的完成
优点:
- 性能开销小
缺点:
- 在极端情况下,如果 Redis 在执行异步删除后崩溃,可能会丢失最后一次清空的数据
总结:
- 异步删除主要关注于提高执行 FLUSHDB 命令的执行速度,即不会引入等待磁盘写入的性能开销
- 它不会立即将所有数据写入磁盘,而是通过异步的方式在后台完成这个过程
- 这也是为什么在异步删除的情况下,可以更快地执行清空数据库的操作
实例理解
- 使用 FLUSHDB 命令
- 使用 FLUSHALL 命令
相关文章:

2024.1.3 关于 Redis 渐进式遍历 和 数据库管理命令
目录 引言 渐进式遍历 SCAN 命令 数据库管理命令 切换数据库 获取数据库 key 个数 删除数据库所有 key 同步删除 SYNC 异步删除 ASYNC 阅读下述文章之前建议点击下方链接熟悉 keys 命令的用法和特点 Redis 全局通用命令 渐进式遍历 keys * 命令一次性将 Redi…...
并发编程:线程同步基础:5、读写锁。ReentrantReadWriteLock
1、主要方法 .readLock().lock();获取读锁 读锁之间互不干扰。 .writeLock().lock();获取写锁 写锁可以锁定住读锁和其他写操作。 2、主程序 package xyz.jangle.thread.test.n2_5.rwlock;import java.util.concurrent.TimeUnit;/*** * 读写锁。ReentrantReadWriteLock* a…...
SpringBoot 集成 Kafka消息中间件,Docker安装Kafka环境
前述 提供kafka、zooker在docker环境下进行安装的示例,springBoot集成kafka实现producer-生产者和consumer-消费者(监听消费:single模式和batch模式)的功能实现 环境安装 # 拉取镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka# 运行zooker docker …...
阿里云Alibaba Cloud Linux 3镜像版本大全特性说明
Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版,Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式,目前已经推出Alibaba Cloud Linux 3,阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 3版本特性说明ÿ…...

基于SSM的滁艺咖啡在线销售系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
【设计模式之美】理论一:怎么才算是单一原则、如何取舍单一原则
文章目录 一. 如何判断类的职责是否足够单一?二. 类的职责是否设计得越单一越好? 开始学习一些经典的设计原则,其中包括,SOLID、KISS、YAGNI、DRY、LOD 等。 本文主要学习单一职责原则的相关内容。 单一职责原则的定义:…...

MYSQL 深入探索系列六 SQL执行计划
概述 好久不见了,近期一直在忙项目的事,才有时间写博客,近期频繁出现sql问题,今天正好不忙咱们看看千万级别的表到底该如何优化sql。 案例 近期有个小伙伴生产环境收到了告警,有个6千万的日志表,查询耗时大…...
安装jupyter notebook,jupyter notebook的简单使用
借助anaconda安装jupyter notebook,先下载anaconda然后在Anaconda Prompt中输入命令: 输入"jupyter notebook",在默认浏览器中打开jupyter notebook。 输入"jupyter notebook --no-browser",启动服务器,但不打…...

宏集PC Runtime软件助推食品行业生产线数字化革新
一、前言 近年来,中国食品行业发展迅速且灵活多变,在当前经济下行的情形下,食品行业正面临着日益激烈的竞争,导致企业利润下降。 为了保持企业市场竞争力,国内某top10食品企业采用宏集SCADA解决方案—PC Runtime软件…...

python的课后练习总结3之条件语句
1,简单点,只有IF IF 后面加入条件然后冒号: 条件成立执行的代码1 条件成立执行的代码2 条件是否成立都执行的代码 身高 float(input(请输入你的身高(米):)) if 身高 > 1.3:print(f您的身高是{身高}米,请您买票) print(祝您旅途愉快) 2,IF 加个else if 条件:…...

RedisTemplate序列化
SpringBoot整合Redis,配置RedisTemplate序列化。如果使用StringRedisTemplate,那么不需要配置序列化,但是StringRedisTemplate只能存储简单的String类型数据,如图: 如果使用StringRedisTemplate存储一个常规对象&#…...

小米SU7汽车发布会; 齐碳科技C+轮融资;网易 1 月 3 日发布子曰教育大模型;百度文心一言用户数已突破 1 亿
投融资 • 3200 家 VC 投资的创业公司破产,那个投 PLG 的 VC 宣布暂停投资了• 云天励飞参与 AI 技术与解决方案提供商智慧互通 Pre-IPO 轮融资• 百度投资 AIGC 公司必优科技• MicroLED量测公司点莘技术获数千万级融资• 智慧互通获AI上市公司云天励飞Pre-IPO轮战…...

Python----matplotlib库
目录 plt库的字体: plt的操作绘图函数: plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number): plt.axes(rect): plt.subplots_adjust(): plt的读取和显示相关函数: plt库的基础图…...

PostgreSQL荣获DB-Engines 2023年度数据库
数据库流行度排名网站 DB-Engines 2024 年 1 月 2 日发布文章宣称,PostgreSQL 荣获 2023 年度数据库管理系统称号。 PostgreSQL 在过去一年中获得了比其他 417 个产品更多的流行度增长,因此获得了 2023 年度 DBMS。 DB-Engines 通过计算每种数据库 2024 …...

【每天五道题,轻松公务员】Day3:太阳常识
目录 专栏了解 ☞欢迎订阅☜ ★专栏亮点★ ◇专栏作者◇ 太阳常识 题目一 题目二 题目三 题目四 题目五 答案 补充扩展 专栏了解 ☞欢迎订阅☜ 欢迎订阅此专栏:考公务员,必订!https://blog.csdn.net/m0_73787047/category_1254…...

基于metersphere和supper-jacoco 测试覆盖率落地实践
一、背景及目标 背景 1、技术研发流程为测试 提供冒烟用例-开发根据用例自测-提测-开始测试,这一套流程,但是中间开发是否真实执行冒烟,测试并不知晓,而且测试提供冒烟用例是否符合标准也没法进行量化 2、公司产品属于saas产品&…...
LeetCode每周五题_2024/01/01~2024/01/05
文章目录 1599. 经营摩天轮的最大利润 [2024/01/01]题目题解 466. 统计重复个数 [2024/01/02]题目题解 2487. 从链表中移除节点 [2024/01/03]题目题解 1599. 经营摩天轮的最大利润 [2024/01/01] 题目 1599. 经营摩天轮的最大利润 你正在经营一座摩天轮,该摩天轮共…...
【华为OD机试真题2023CD卷 JAVAJS】抢7游戏
华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 抢7游戏 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: A、B两个人玩抢7游戏,游戏规则为A先报一个起始数字X(10<起始数字<10000),B报下一个数字Y(X-Y<3),A再报一个数字Z(Y-Z<3),以此类推,直…...

14.7-时序反馈移位寄存器建模
时序反馈移位寄存器建模 1,阻塞赋值实现的LFSR,实际上并不具有LFSR功能1.1.1,RTL设计,阻塞赋值1.1.2,tb测试代码1.1.3,波形仿真输出,SIM输出,没实现LFSR1.2.1,RTL设计&am…...

【设计模式】二十一.行为型模式之状态模式
状态模式 一. 说明 状态模式通常描述一个类不同行为的多个状态变更,对象的行为依赖它的状态,它是一种行为型模式。 状态模式可以用来消除代码中大量的if-else结构,它明确对象是有状态的、对象的不同状态对应的行为不一样、行为之间是可以切…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...