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

1,渐进式遍历

Redis 使用 scan 命令进行渐进式遍历键,进而解决直接使用 keys 获取键时可能出现的阻塞问题。每次 scan 命令的时间复杂度是 O(1),但是要完整地完成所有键的遍历,需要执行多次 scan。

SCAN cursor MATCH pattern COUNT count TYPE type

参数 作用 说明
cursor 游标 遍历的起始点,第一次遍历从 0 开始,每次遍历结束时会返回一个新的游标,当游标为 0 时表示遍历完成。
MATCH pattern 匹配模式 可选参数,用于模糊匹配键名,支持 * 和 ? 通配符。例如 user:* 匹配所有以 user: 开头的键。
COUNT count 预期数量 可选参数,用于指定每次遍历希望返回的键的数量,默认值为 10。注意 :这只是一个建议值,Redis 不保证每次都返回 exactly count 个键。
TYPE type 类型过滤 可选参数,用于只遍历指定类型的键,例如 string、hash、list、set、zset 等。

除了 scan 以外,Redis 面向哈希类型、集合类型、有序集合类型分别提供了 hscan、sscan、zscan 命令,它们的用法和 scan 基本类似。

2,数据库管理

Redis 中存在数据库的概念,与MySQL不同的是,Redis 默认提供了16 个数据库,编号 0-15,不能像MySQL那样创建和删除。这16个数据库中的数据是隔离的,互相之间不会受到影响,默认情况下私用的数据库编号是0(实际应用中很少会关注redis数据库,默认使用0号就可以)。

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

切换数据库:select dbIndex

例如:select 15 // 切换到15号数据库

清除数据库:flushdb 或 flushall // 两者都用于清除数据库,区别在于 flushdb 只清除当前数据库,flushall 会清楚所有数据库。该指令一定要慎重执行。

获取当前数据库中 key 的个数:dbsize

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

相关推荐
这个DBA有点耶8 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB8 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB8 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB8 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
这个DBA有点耶10 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768913 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!14 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网14 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿14 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构