2026/10/28 2:24:18

Redis核心命令实战:8个必知必会的通用操作

Redis核心命令实战:8个必知必会的通用操作 1. Redis通用命令概述Redis作为当今最流行的内存数据库之一其命令行接口是开发者日常操作的核心工具。我使用Redis已有7年时间从最初的简单键值存储到现在的复杂数据结构应用深刻体会到掌握通用命令的重要性。这些命令就像是Redis的瑞士军刀无论你使用哪种数据结构它们都能提供基础而强大的操作能力。在Redis 6.2版本中官方文档列出的通用命令共有24个这些命令不针对特定数据类型而是对所有键都适用。实际工作中我发现80%的日常操作都可以用不到10个通用命令完成。本文将重点介绍最实用的8个核心命令这些命令经过我多年实战验证能覆盖大部分使用场景。提示虽然这些是通用命令但不同Redis版本可能存在细微差异建议先通过redis-cli --version确认你的Redis版本。2. 键操作基础命令2.1 EXISTS - 键存在性检查这个命令我几乎每天都要用几十次它的基本语法是EXISTS key [key ...]当我们需要检查某个缓存是否已设置时EXISTS是首选。比如在电商系统中检查用户购物车是否初始化127.0.0.1:6379 EXISTS user:1001:cart (integer) 0 # 返回0表示不存在实用技巧可以一次检查多个键返回的是存在的键数量在集群模式下所有键必须位于同一slot否则会报错性能极高时间复杂度O(1)不用担心频繁调用影响性能2.2 DEL - 键删除删除操作看似简单但有些细节需要注意DEL key [key ...]实际案例清除用户会话数据127.0.0.1:6379 DEL user:1001:session user:1001:cart (integer) 2 # 返回成功删除的键数量注意事项Redis 4.0支持异步删除(UNLINK)大数据量时性能更好删除不存在的键不会报错返回0生产环境慎用通配符删除建议先用SCAN检查2.3 EXPIRE - 设置过期时间这是实现缓存特性的核心命令EXPIRE key seconds典型应用场景设置API调用频率限制127.0.0.1:6379 SET api:limit:user1001 10 OK 127.0.0.1:6379 EXPIRE api:limit:user1001 60 (integer) 1进阶用法PEXPIRE以毫秒为单位设置过期EXPIREAT指定Unix时间戳过期对已过期的键操作会返回-23. 键信息查询命令3.1 TYPE - 获取键类型在操作未知键时这个命令能避免很多错误TYPE key使用示例127.0.0.1:6379 SET test:str hello OK 127.0.0.1:6379 TYPE test:str string重要提示返回类型包括string, list, set, zset, hash, stream等不存在的键返回none在Lua脚本中常用此命令做类型检查3.2 TTL - 查看剩余生存时间检查缓存何时失效的必备命令TTL key实际应用127.0.0.1:6379 SET session:user1001 data EX 3600 OK 127.0.0.1:6379 TTL session:user1001 (integer) 3598返回值说明-2键不存在-1键存在但没有设置过期正整数剩余的生存时间(秒)4. 批量操作命令4.1 SCAN - 安全遍历键替代KEYS命令的安全选择SCAN cursor [MATCH pattern] [COUNT count]生产环境示例127.0.0.1:6379 SCAN 0 MATCH user:* COUNT 100 1) 125 2) 1) user:1001 2) user:1002为什么推荐SCAN不会阻塞服务器适合生产环境可以配合MATCH实现模式匹配COUNT参数只是建议值实际返回可能不同遍历过程中键可能被修改这是预期行为4.2 RENAME - 键重命名修改键名而不丢失数据RENAME key newkey使用场景数据迁移127.0.0.1:6379 SET old:key value OK 127.0.0.1:6379 RENAME old:key new:key OK注意事项如果newkey已存在它会被覆盖在集群模式下key和newkey必须在同一slot大数据量键的RENAME可能阻塞Redis5. 实用技巧与常见问题5.1 命令组合使用示例实际工作中我们经常组合使用这些命令。比如实现一个安全的缓存更新逻辑# 检查键是否存在 127.0.0.1:6379 EXISTS product:1001 (integer) 1 # 获取剩余过期时间 127.0.0.1:6379 TTL product:1001 (integer) 300 # 更新数据并重置过期时间 127.0.0.1:6379 SET product:1001 {...} EX 3600 OK5.2 常见问题排查问题1DEL命令返回0但键确实存在可能原因键在另一节点(集群模式)解决方案使用正确的路由或跨节点删除工具问题2EXPIRE不生效检查点确认键存在(EXISTS)确认键类型(TYPE)检查是否有持久化操作重置了过期时间问题3SCAN返回重复键这是正常现象因为SCAN基于游标分批次返回最终一致性模型保证不遗漏但不保证不重复6. 性能优化建议根据我的经验合理使用通用命令可以显著提升Redis性能批量操作尽可能使用批量形式的命令如DEL key1 key2比多次DEL更高效管道技术将多个命令通过管道(pipeline)一次发送减少网络往返Lua脚本复杂操作封装成原子性脚本例如local exists redis.call(EXISTS, KEYS[1]) if exists 1 then return redis.call(GET, KEYS[1]) else redis.call(SET, KEYS[1], ARGV[1], EX, 3600) return nil end监控命令耗时使用SLOWLOG GET查看慢查询优化热点命令7. 版本兼容性说明不同Redis版本在通用命令上有细微差异Redis 4.0新增UNLINK非阻塞删除Redis 5.0SCAN支持TYPE过滤Redis 6.2EXPIRE支持NX/XX/GT/LT选项在实际项目中我建议通过INFO SERVER查看版本信息并参考对应版本的官方文档。对于关键系统最好在测试环境验证命令行为是否符合预期。