Redis 命令介绍:从入门到精通 – wiki大全


Redis 命令介绍:从入门到精通

Redis (Remote Dictionary Server) 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis 以其卓越的性能、丰富的数据结构和灵活性,在现代 Web 应用和实时系统中广受欢迎。本文将带您从 Redis 的基础命令开始,逐步深入到其高级特性和最佳实践,助您掌握 Redis 的强大功能。

1. Redis 入门:核心概念与基本命令

什么是 Redis?

Redis 是一款高性能的键值存储系统,但它不仅仅是一个简单的键值对存储。它支持多种数据结构,并将数据存储在内存中,因此读写速度极快,可以达到亚毫秒级延迟。

Redis 的主要优势:
* 极速性能: 数据存储在内存中,读写操作响应迅速。
* 丰富的数据结构: 不仅仅是字符串,还支持列表、哈希、集合、有序集合等。
* 原子性操作: 所有 Redis 操作都是原子的,确保数据一致性。
* 多功能性: 可用于缓存、会话管理、实时分析、消息队列、排行榜等多种场景。

键 (Key) 管理

在 Redis 中,所有数据都通过键 (Key) 来访问。键通常是字符串,但也可以是二进制数据。

基本键命令:
* SET key value: 将键 key 的值设置为 value。如果 key 已经存在,则会覆盖旧值。
* GET key: 获取键 key 的值。如果 key 不存在,则返回 nil
* DEL key [key ...]: 删除一个或多个键。
* EXISTS key: 检查键 key 是否存在。存在返回 1,否则返回 0
* EXPIRE key seconds: 设置键 key 的过期时间,单位为秒。
* TTL key: 返回键 key 剩余的生存时间(秒)。-1 表示永不失效,-2 表示键不存在。
* KEYS pattern: 查找所有符合给定模式 pattern 的键。注意:在生产环境中谨慎使用,因为它可能阻塞服务器。
* SCAN cursor [MATCH pattern] [COUNT count]: 增量迭代键,避免阻塞。这是生产环境中查找键的推荐方式。
* RENAME key newkey: 将键 key 重命名为 newkey
* TYPE key: 返回键 key 所存储值的类型(如 string, list, hash 等)。

2. Redis 数据结构及其命令

Redis 强大之处在于其内置支持多种高级数据结构,每种结构都有一套专门的命令。

2.1 字符串 (Strings)

字符串是 Redis 最基本的数据类型,可以存储文本或二进制数据,最大容量为 512MB。它们也可以表示整数,用于原子递增/递减操作。

常用命令:
* SET key value: 设置键值对。
* GET key: 获取键值。
* INCR key: 将键 key 存储的整数值原子性地递增 1。
* DECR key: 将键 key 存储的整数值原子性地递减 1。
* INCRBY key increment: 将键 key 存储的整数值原子性地递增 increment
* DECRBY key decrement: 将键 key 存储的整数值原子性地递减 decrement
* APPEND key value: 如果键 key 已经存在,则将 value 追加到它的值后面。如果 key 不存在,则等同于 SET key value
* GETRANGE key start end: 获取字符串值的指定范围内的子字符串。
* SETEX key seconds value: 设置键 key 的值和过期时间。
* MSET key value [key value ...]: 同时设置多个键值对。
* MGET key [key ...]: 同时获取多个键的值。

2.2 列表 (Lists)

Redis 列表是简单的字符串列表,按照插入顺序排序。它们是链表实现的,适合用作队列、栈和有序集合。

常用命令:
* LPUSH key value [value ...]: 将一个或多个值插入到列表的左侧 (头部)。
* RPUSH key value [value ...]: 将一个或多个值插入到列表的右侧 (尾部)。
* LPOP key: 移除并返回列表的第一个元素 (左侧)。
* RPOP key: 移除并返回列表的最后一个元素 (右侧)。
* LRANGE key start stop: 获取列表中指定范围内的元素。startstop 为 0 基索引,-1 表示最后一个元素。
* LLEN key: 返回列表的长度。
* LINDEX key index: 返回列表中指定索引的元素。
* LREM key count value: 从列表中删除前 count 个值为 value 的元素。count > 0 从头开始删除,count < 0 从尾开始删除,count = 0 删除所有。

2.3 集合 (Sets)

Redis 集合是无序的、不重复的字符串集合。它们适合存储唯一元素,实现标签、兴趣点等功能,并支持集合运算。

常用命令:
* SADD key member [member ...]: 向集合中添加一个或多个成员。
* SMEMBERS key: 返回集合中的所有成员。
* SISMEMBER key member: 检查 member 是否是集合 key 的成员。
* SREM key member [member ...]: 移除集合中的一个或多个成员。
* SCARD key: 返回集合的成员数量。
* SUNION key [key ...]: 返回给定所有集合的并集。
* SINTER key [key ...]: 返回给定所有集合的交集。
* SDIFF key [key ...]: 返回给定第一个集合与其他集合的差集。
* SRANDMEMBER key [count]: 从集合中随机返回一个或多个成员。

2.4 哈希 (Hashes)

Redis 哈希是一个键值对的集合,其中键是字符串,值也是字符串。它非常适合存储对象,例如用户的资料信息、商品详情等。

常用命令:
* HSET key field value [field value ...]: 将哈希表 key 中的一个或多个 field 的值设置为 value
* HGET key field: 获取哈希表 key 中给定 field 的值。
* HGETALL key: 返回哈希表 key 中所有 fieldvalue
* HDEL key field [field ...]: 删除哈希表 key 中的一个或多个 field
* HKEYS key: 返回哈希表 key 中所有 field
* HVALS key: 返回哈希表 key 中所有 value
* HLEN key: 返回哈希表 keyfield 的数量。
* HINCRBY key field increment: 为哈希表 key 中给定 field 的整数值增加 increment

2.5 有序集合 (Sorted Sets / ZSETs)

有序集合和集合一样,也是不重复的字符串集合,但每个成员都关联一个双精度浮点数分数 (score)。有序集合中的成员是按照分数从低到高排序的。它们非常适合实现排行榜、带有权重的标签等。

常用命令:
* ZADD key score member [score member ...]: 向有序集合 key 添加一个或多个带分数 score 的成员 member
* ZRANGE key start stop [WITHSCORES]: 返回有序集合中指定索引范围内的成员,可以包含分数。
* ZREVRANGE key start stop [WITHSCORES]: 返回有序集合中指定索引范围内的成员,按分数从高到低排序。
* ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]: 返回有序集合中指定分数范围内的成员。
* ZSCORE key member: 返回有序集合中指定成员的分数。
* ZREM key member [member ...]: 移除有序集合中的一个或多个成员。
* ZCARD key: 返回有序集合的成员数量。
* ZRANK key member: 返回有序集合中成员的排名(从 0 开始,分数从小到大)。
* ZINCRBY key increment member: 为有序集合中成员的分数增加 increment

2.6 其他数据结构 (掌握进阶)

Redis 还支持更专业的数据结构,用于特定场景:
* Bitmaps (位图): 可以在字符串类型上对位进行操作,非常节省空间,适用于存储大量布尔值(如用户签到、在线状态)。
* HyperLogLogs (基数估计算法): 用于估算集合的基数(不重复元素的数量),内存占用极小,适用于大数据量的独立访客统计等。
* Streams (流): 类似于只追加日志的数据结构,支持多生产者、多消费者的消息队列模型,适用于事件溯源、实时数据流处理。

3. Redis 事务 (Transactions)

Redis 事务允许您将多个命令打包成一个原子操作。在事务执行过程中,其他客户端的命令无法插入,从而保证了命令的原子性和隔离性。

事务命令:
* MULTI: 标记一个事务块的开始。此后所有命令都会被放入队列,而不是立即执行。
* EXEC: 执行所有事务块内的命令。
* DISCARD: 取消事务,放弃执行事务块内的所有命令。
* WATCH key [key ...]: 在 MULTI 之前使用,监视一个或多个键,如果在 EXEC 之前这些键被其他客户端修改,则事务会被中断(乐观锁)。

示例:
“`redis
WATCH mykey

… 获取 mykey 的值并计算新值 …

MULTI
SET mykey new_value
EXEC
“`

4. 发布/订阅 (Publish/Subscribe, Pub/Sub)

Redis 的 Pub/Sub 模式允许客户端订阅频道,并接收发布到这些频道的消息。它实现了消息的解耦,发布者和订阅者之间无需直接通信。

Pub/Sub 命令:
* PUBLISH channel message: 将 message 发送到指定的 channel
* SUBSCRIBE channel [channel ...]: 订阅一个或多个频道。
* PSUBSCRIBE pattern [pattern ...]: 订阅一个或多个模式匹配的频道(例如 news.* 可以匹配 news.sports, news.politics)。

5. Redis 高级特性与精通之路

要真正精通 Redis,除了熟练掌握命令,还需要理解其底层机制和最佳实践。

5.1 Pipelining (管道)

Pipelining 是一种性能优化技术。它允许客户端一次性向 Redis 发送多个命令,而无需等待每个命令的回复。Redis 服务器会将这些命令排队,然后一次性执行并返回所有结果。这显著减少了网络往返时间 (RTT),从而提高吞吐量。

何时使用: 当您需要连续执行大量命令时(如批量写入、读取)。

5.2 Persistence (持久化)

Redis 是内存数据库,但为了防止数据丢失,它提供了两种持久化机制:

  • RDB (Redis Database Backup):

    • 在指定时间间隔内将内存中的数据集快照写入磁盘。
    • 优点:适合做备份,恢复速度快,非常紧凑的文件。
    • 缺点:如果 Redis 突然宕机,可能会丢失最后一次快照之后的数据。
  • AOF (Append Only File):

    • 记录所有对 Redis 进行修改的写操作命令,并追加到文件中。
    • 优点:数据完整性更高,可以配置多种同步策略(每秒同步、每次写同步等)。
    • 缺点:AOF 文件通常比 RDB 文件大,恢复速度相对较慢。

最佳实践: 生产环境通常会同时启用 RDB 和 AOF,以兼顾恢复速度和数据完整性。

5.3 High Availability (高可用) 与 Clustering (集群)

  • Redis Sentinel (哨兵):

    • 为 Redis 提供高可用性解决方案。
    • 监控主服务器和从服务器的运行状态。
    • 当主服务器宕机时,Sentinel 会自动执行故障转移,将一个从服务器升级为新的主服务器。
    • 客户端通过 Sentinel 发现新的主服务器地址。
  • Redis Cluster (集群):

    • 提供分布式存储和水平扩展能力。
    • 将数据分散存储在多个 Redis 节点上,每个节点只负责一部分数据。
    • 自动进行数据分片、故障转移和节点感知。
    • 适合处理大规模数据集和高并发场景。

5.4 安全最佳实践

  • 设置强密码: 使用 requirepass 配置指令设置访问密码。
  • 限制网络访问: 通过防火墙限制只有可信 IP 才能访问 Redis 端口(默认为 6379)。
  • 禁用危险命令:redis.conf 中重命名或禁用 FLUSHDBFLUSHALLCONFIG 等潜在危险命令,或者通过 ACL 限制其使用。
  • 启用 SSL/TLS: 对于敏感数据,加密客户端与 Redis 之间的通信。
  • 使用 ACLs (访问控制列表): 从 Redis 6.0 开始,可以使用 ACL 精细地控制用户和应用程序的权限。

5.5 内存管理

由于 Redis 是内存数据库,高效的内存管理至关重要:
* 选择合适的数据结构: 针对不同场景选择最节省内存的数据结构。例如,使用哈希存储对象比存储多个字符串键更节省内存。
* 设置 maxmemory 和逐出策略: 配置 maxmemory 来限制 Redis 使用的最大内存量,并选择合适的逐出策略(如 allkeys-lru 最近最少使用),以便在内存不足时自动删除旧数据。
* 避免大键: 尽量避免存储过大的键值对,这可能导致内存碎片化和阻塞操作。

5.6 监控与优化

  • INFO 命令: 定期使用 INFO 命令查看 Redis 服务器的运行状态、内存使用、连接数等指标。
  • redis-cli 工具: 使用 redis-cli 的各种功能,如 MONITOR 实时查看所有命令、SLOWLOG GET 查看慢查询日志。
  • 识别慢查询: 调整 slowlog-log-slower-than 配置项来记录执行时间超过指定阈值的命令,并优化这些慢查询。

总结

Redis 是一个功能极其强大的工具,它的命令设计直观而高效。从掌握基本的数据结构操作,到利用事务、发布/订阅实现复杂逻辑,再到深入理解持久化、高可用和集群等高级特性,每一步都将提升您构建高性能、可扩展应用的技能。通过不断实践和探索,您将能够充分发挥 Redis 的潜力,为您的项目带来卓越的性能和稳定性。

滚动至顶部