Redis 常见数据类型(一):全局通用命令详解
Redis 作为当下最热门的高性能键值数据库,它的 5 种核心数据结构是我们开发和运维的重中之重。想要用好 Redis,先得把 “通用钥匙” 摸透 —— 也就是对所有 key 都生效的全局命令。今天我们就从预备知识入手,把这些基础命令讲得明明白白,为后面深入学习数据结构打好地基。
一、预备知识:为什么要先学全局命令?
在正式介绍 5 种数据结构之前,了解 Redis 的全局命令、数据结构和内部编码、单线程命令处理机制,能帮我们解决两个核心痛点:
告别死记硬背:Redis 命令上百个,但很多命令逻辑高度通用,理解底层机制后,学习效率会大幅提升。
避免踩坑翻车:Redis 不是万能的,有些命令和数据结构使用不当,可能会对 Redis 服务或业务应用造成致命伤害。
Redis 的所有数据结构,本质上都是 “键值对” 中的 “值”,而针对 “键” 的操作,有一套所有数据结构都通用的命令,我们一个一个来看。
二、KEYS:按模式匹配查找 key
KEYS命令可以返回所有满足指定模式(pattern)的 key,支持通配符匹配,是批量查找 key 的利器。
通配符规则
?:匹配单个字符,比如h?llo能匹配hello、hallo、hxllo\*:匹配任意多个字符(包括 0 个),比如h\*llo能匹配hllo、heeeello\[\]:匹配指定范围内的单个字符,比如h\[ae\]llo匹配hello和hallo,但不匹配hillo\[^\]:匹配不在指定范围内的单个字符,比如h\[^e\]llo匹配hallo、hbllo,但不匹配hello\[a\-b\]:匹配 a 到 b 之间的单个字符,比如h\[a\-b\]llo匹配hallo和hbllo
基础信息
语法:
KEYS pattern有效版本:Redis 1.0.0 及以上
时间复杂度:O (N),N 为数据库中 key 的总数
返回值:匹配 pattern 的所有 key 列表
使用示例
# 批量设置3个keyredis>MSET firstname Jack lastname Stuntman age35"OK"# 匹配包含name的keyredis>KEYS *name*1)"firstname"2)"lastname"# 匹配以a开头、后接两个字符的keyredis>KEYS a??1)"age"# 匹配所有key(线上环境慎用!)redis>KEYS *1)"age"2)"firstname"3)"lastname"⚠️ 注意:KEYS \*会遍历所有 key,在 key 数量极多的生产环境中执行,会阻塞 Redis 主线程,导致服务短暂不可用,线上环境一定要避免直接使用。
三、EXISTS:判断 key 是否存在
EXISTS命令用来检查一个或多个 key 是否存在,是我们操作 key 前常用的前置校验命令。
基础信息
语法:
EXISTS key \[key \.\.\.\]有效版本:Redis 1.0.0 及以上
时间复杂度:O (1)
返回值:存在的 key 的数量(支持同时判断多个 key)
使用示例
# 设置一个keyredis>SET key1"Hello""OK"# 判断单个key是否存在redis>EXISTS key1(integer)1# 1表示存在# 判断不存在的keyredis>EXISTS nosuchkey(integer)0# 0表示不存在# 同时判断多个keyredis>SET key2"World""OK"redis>EXISTS key1 key2 nosuchkey(integer)2# 只有key1和key2存在,返回2四、DEL:删除指定的 key
DEL命令用于删除一个或多个已存在的 key,支持批量删除,执行效率很高。
基础信息
语法:
DEL key \[key \.\.\.\]有效版本:Redis 1.0.0 及以上
时间复杂度:O (1)
返回值:成功删除的 key 的数量
使用示例
# 设置两个keyredis>SET key1"Hello""OK"redis>SET key2"World""OK"# 批量删除key1、key2和不存在的key3redis>DEL key1 key2 key3(integer)2# 成功删除2个key五、EXPIRE & TTL:给 key 设置过期时间
Redis 支持给 key 设置过期时间,到期后 key 会被自动删除,这两个命令是实现过期机制的核心。
1. EXPIRE:设置 key 的过期时间
EXPIRE命令为指定的 key 添加秒级的过期时间(TTL,Time To Live)。
语法:
EXPIRE key seconds有效版本:Redis 1.0.0 及以上
时间复杂度:O (1)
返回值:
1表示设置成功,0表示 key 不存在或设置失败
2. TTL:获取 key 的剩余过期时间
TTL命令可以查询 key 的剩余过期时间(秒级)。
语法:
TTL key有效版本:Redis 1.0.0 及以上
时间复杂度:O (1)
返回值:
正数:剩余的秒数
\-1:key 存在但没有设置过期时间\-2:key 不存在
使用示例
# 设置一个key并给它设置10秒过期redis>SET mykey"Hello""OK"redis>EXPIRE mykey10(integer)1# 查看剩余过期时间redis>TTL mykey(integer)10💡 补充:EXPIRE和TTL都有毫秒级的对应版本:PEXPIRE和PTTL,用法完全一致,只是时间单位换成毫秒。
过期机制示意图
我们可以用时间轴来理解 key 的过期过程:
时间轴 → |------- set key value ----|---- get key(能拿到值)----|---- Redis淘汰key(get返回nil) | | |-- expire key n(设置过期时间n秒)--|key 设置过期时间后,会在当前时间 + 过期时间的节点被标记为过期
过期的 key 不会立即被删除,Redis 会通过定期删除和惰性删除的策略清理它们
六、TYPE:查看 key 的数据类型
Redis 支持多种数据结构,TYPE命令可以快速查看一个 key 对应的值的类型,帮我们避免命令使用错误。
基础信息
语法:
TYPE key有效版本:Redis 1.0.0 及以上
时间复杂度:O (1)
返回值:key 的数据类型,包括
none(key 不存在)、string、list、set、zset、hash、stream
使用示例
# 设置不同类型的keyredis>SET key1"value"# 字符串类型"OK"redis>LPUSH key2"value"# 列表类型(integer)1redis>SADD key3"value"# 集合类型(integer)1# 查看类型redis>TYPE key1"string"redis>TYPE key2"list"redis>TYPE key3"set"七、小结:全局命令的核心价值
这几个全局命令,是我们和 Redis 交互的 “基础操作手册”:
KEYS帮我们批量查找 key,EXISTS帮我们校验 key 是否存在DEL实现 key 的删除,EXPIRE/TTL实现 key 的生命周期管理TYPE帮我们快速识别 key 的数据类型,避免命令用错
它们不仅是后续学习 5 种数据结构的热身,更是 Redis 日常运维和业务开发中高频使用的命令。下一篇我们就开始深入 Redis 最基础的数据结构 —— 字符串(String),聊聊它的用法和应用场景。