Redis 通用命令

key通用操作

Key基本操作

 删除指定key

del key

 获取key是否存在

exists key

 获取key的类型

type key

127.0.0.1:6379> set str str
OK
127.0.0.1:6379> hset hash hash1 hash1
(integer) 1
127.0.0.1:6379> lpush list1 list1
(integer) 4
127.0.0.1:6379> sadd set1 set1
(integer) 1
127.0.0.1:6379> zadd zset 1 1 zsete1
(error) ERR syntax error
127.0.0.1:6379> zadd zset1 1 zsete1
(integer) 1
127.0.0.1:6379> type zset1
zset
127.0.0.1:6379> type str
string
127.0.0.1:6379> type hash1
none
127.0.0.1:6379> type hash
hash

Key扩展操作(时效性控制)

 为指定key设置有效期

expire key seconds

pexpire key milliseconds

expireat key timestamp

pexpireat key milliseconds-timestamp

 获取key的有效时间

//返回-1存在 -2不存在 或者有效期

ttl key

pttl key

 切换key从时效性转换为永久性

persist key

127.0.0.1:6379> set str str
OK
127.0.0.1:6379> lpush list1 list1
(integer) 5
127.0.0.1:6379> lpush list2 list2
(integer) 4
127.0.0.1:6379> expire str 3
(integer) 1
127.0.0.1:6379> get str
(nil)
127.0.0.1:6379> ttl str
(integer) -2
127.0.0.1:6379> expire list1 30
(integer) 1
127.0.0.1:6379> ttl list1
(integer) 26
127.0.0.1:6379> ttl list1
(integer) 16
//返回-1存在 -2不存在 或者有效期
127.0.0.1:6379> ttl str
(integer) -2
127.0.0.1:6379> ttl list2
(integer) -1
127.0.0.1:6379> persist list2
(integer) 0
127.0.0.1:6379> expire list2 60
(integer) 1
127.0.0.1:6379> persist list2
(integer) 1
127.0.0.1:6379> ttl list
(integer) -2
127.0.0.1:6379> persist str
(integer) 0

key 扩展操作(查询模式)

 查询key

keys pattern

* 匹配任意数量的任意符号 ? 配合一个任意符号 [] 匹配一个指定符号

keys * 查询所有
keys it* 查询所有以it开头
keys *heima 查询所有以heima结尾
keys ??heima 查询所有前面两个字符任意,后面以heima结尾
keys user:? 查询所有以user:开头,最后一个字符任意
keys u[st]er:1 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t
127.0.0.1:6379> keys it*
(empty list or set)
127.0.0.1:6379> keys s*
1) "set1"
127.0.0.1:6379> keys i?heima
(empty list or set)
127.0.0.1:6379> set smr smr
OK
127.0.0.1:6379> keys s?r
1) "smr"
127.0.0.1:6379> keys ????
1) "news"
2) "hash"
3) "set1"
4) "a001"
5) "name"
6) "user"
127.0.0.1:6379> keys n[]me
(empty list or set)
127.0.0.1:6379> keys n[abc]me
1) "name"
127.0.0.1:6379> set nbme nbme
OK
127.0.0.1:6379> set newme nwme
OK
127.0.0.1:6379> keys n[aw]me
1) "name"

key 其他操作

 为key改名

rename key newkey

renamenx key newkey

 对所有key排序

sort

 其他key通用操作

help @generic

<think> 首先,用户的问题是关于Redis通用命令keys的用途。我需要根据提供的引用内容来构建回答。引用包括: - 引用[1]:提到了get和set命令,但没有直接关于keys命令的详细信息。 - 引用[2]:讨论了Redis通用命令,包括KEYS命令的简要描述。 - 引用[3]:专门针对KEYS命令,解释了它的语法、说明和注意事项。 - 引用[4]:讨论了keys命令和scan命令的比较,特别是keys命令的性能问题。 用户的问题具体是:“我想了解Redis通用命令keys的用途”,所以我需要聚焦在keys命令的用途上。 关键点从引用中提取: - 从引用[3]:KEYS命令用于返回与指定模式相匹配的所有keys。语法是KEYS pattern。它返回数据库中所有匹配给定模式的键。时间复杂度为O(N),其中N是数据库中的keys数量。常量系数很低,但在大型数据库中使用可能会损害性能。主要用于调试和特殊操作。 - 从引用[2]:KEYS命令是常见命令之一,用于列出所有键。 - 从引用[4]:keys命令是全量扫描,不考虑扩容问题,但scan命令更适合生产环境因为它支持增量扫描。 用途总结: - KEYS命令的主要用途是查找和列出Redis数据库中所有匹配特定模式的键。 - 例如,可以用于调试时查看所有键,或进行键空间管理。 我需要确保回答结构清晰、真实可靠,并参考引用。 回答结构: 1. 介绍KEYS命令的基本用途。 2. 解释语法和如何使用。 3. 讨论优点和缺点,包括性能注意事项(从引用[3]和[4])。 4. 提供示例。 5. 自然地添加引用标识。 最后,根据系统指令,我需要生成相关问题。系统指令说:"生成相关问题",并给出了示例。所以,在回答末尾添加"§§相关问题§§"部分。 系统级指令包括: - 使用$...$ 和 $$...$$ 格式处理数学表达式(但这里可能不涉及数学)。 - LaTeX语法正确(同样,可能不需要)。 - 使用中文回答。 - 引用的段落末尾添加引用标识,如[^1]。 在用户可见层,要结构清晰,帮助用户逐步解决问题。 步骤: 1. 开头直接回答用户问题:KEYS命令的用途是什么。 2. 详细解释。 3. 添加注意事项。 4. 生成相关问题。 引用标识:我需要基于提供的引用添加标识。引用有[^1], [^2], [^3], [^4]。在回答中,当引用相关段落时,添加这些标识。 例如,如果我从引用[3]提取内容,末尾加[^3]。 最终回答: - 先介绍用途。 - 然后语法。 - 然后性能警告。 - 相关命令对比(如SCAN)。 - 示例。 - 相关问题。 相关问题生成:基于主题,如: 1. KEYS命令的性能影响? 2. 替代命令如SCAN的用法? 3. KEYS命令的实际应用场景? 最后,确保回答是中文。 </think>### Redis通用命令KEYS的用途 Redis的KEYS命令主要用于在数据库中查找和列出所有匹配指定模式的键(key)。它是一个调试和管理工具,允许用户基于通配符模式快速检索键的名称。这在数据库维护、监控或开发调试中非常有用。下面我将逐步解释其核心用途、语法、注意事项和示例,确保回答真实可靠,并基于提供的引用内容。 #### 1. **核心用途** - **模式匹配和键检索**:KEYS命令通过一个模式(pattern)参数,返回数据库中所有符合该模式的键名。模式支持通配符,例如: - `KEYS *`:列出所有键。 - `KEYS user:*`:列出所有以"user:"为前缀的键(例如,用于用户相关的数据)。 这在需要批量操作或分析键空间时非常高效,比如在调试时查看键的分布或查找特定前缀的键[^3]。 - **调试和特殊操作**:KEYS命令常用于开发环境或诊断场景,例如: - 检查键的存在性或命名规则。 - 配合其他命令(如DEL)批量删除匹配键(但需谨慎,避免生产环境使用)[^3]。 引用[3]强调,KEYS命令主要是设计用于调试和特殊操作,如更改键空间的布局(layout),而不是日常生产查询[^3]。 #### 2. **语法和基本用法** - **语法**:`KEYS pattern` - `pattern`:一个字符串模式,支持通配符: - `*`:匹配任意字符序列(例如,`KEYS *` 匹配所有键)。 - `?`:匹配单个字符(例如,`KEYS u?er` 匹配"user"或"u2er")。 - `[...]`:匹配括号内的任意字符(例如,`KEYS u[st]er` 匹配"user"或"uter")。 - **返回值**:一个列表,包含所有匹配的键名。如果没有匹配项,返回空列表。 - **示例命令**: ```redis KEYS * // 列出所有键 KEYS cache:* // 列出所有以"cache:"开头的键 ``` 在Redis命令行中,直接输入这些命令即可执行。注意,模式匹配是基于键名的字符串比较。 #### 3. **性能注意事项和缺点** - **时间复杂度**:KEYS命令的时间复杂度为$O(N)$,其中$N$是数据库中的键总数。虽然常量系数较低(意味着在小规模数据库中速度较快),但在大规模键空间(如百万级键)中,它会阻塞Redis单线程,导致性能显著下降或服务停顿[^3]。 - **生产环境警告**:从引用[3]和[4]可知,KEYS命令不适合生产环境频繁使用: - 它执行全量扫描,可能在高负载时损害性能或引发超时[^3]。 - 替代方案:在生产环境中,应使用`SCAN`命令(如`SCAN 0 MATCH pattern`),它支持增量迭代,避免阻塞,并能处理渐进式rehash(如Redis扩容时)[^4]。引用[4]指出,SCAN采用高位进位加法遍历键空间,更安全高效[^4]。 - **使用场景建议**: - **适用**:本地开发、小规模数据库调试、一次性管理任务。 - **不适用**:高并发生产系统、实时查询。引用[3]明确提醒:“在生产环境中使用该命令需要特别注意,该命令在对规模较大的数据库进行操作时可能会损害性能。”[^3] #### 4. **简单示例** 假设Redis数据库中有键:`user:1`, `user:2`, `cache:data`。执行命令: ```redis KEYS user:* // 返回 ["user:1", "user:2"] ``` 这可以用于快速验证键的存在性或批量操作的前置步骤(例如,先用KEYS列出键,再用DEL删除)。 总结,KEYS命令Redis的一个通用工具,核心用途是模式匹配键检索,主要用于调试和特殊管理场景。但在实际应用中,务必考虑性能风险,优先使用SCAN命令替代[^3][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值