首页 新能源汽车

Redis 命令速查:从入门到精通,核心命令实战详解与避坑指南

字数: (8262)
阅读: (0679)
内容摘要:Redis 命令速查:从入门到精通,核心命令实战详解与避坑指南,

在高并发的互联网应用中,Redis 作为一种高性能的内存数据库,被广泛应用于缓存、会话管理、消息队列等场景。熟练掌握 Redis 命令大全,是提升系统性能和稳定性的关键。本文将深入剖析常用 Redis 命令,并结合实际案例,分享在高并发场景下的优化经验与避坑指南。例如,在处理电商秒杀活动时,如何利用 Redis 的原子性操作防止超卖?如何通过 Pipeline 批量执行命令,减少网络开销? 这些问题都将在下文中得到解答。

Redis 命令速查:从入门到精通,核心命令实战详解与避坑指南

常见 Redis 命令分类及详解

Redis 命令种类繁多,为了方便理解和记忆,我们可以将其分为以下几类:

Redis 命令速查:从入门到精通,核心命令实战详解与避坑指南

1. Key 相关命令

  • DEL key [key ...]: 删除指定的 key。
    DEL mykey yourkey  # 删除 mykey 和 yourkey
    
  • EXISTS key: 检查 key 是否存在,存在返回 1,不存在返回 0。
    EXISTS mykey  # 检查 mykey 是否存在
    
  • EXPIRE key seconds: 设置 key 的过期时间,单位为秒。在高并发场景下,合理设置过期时间可以有效防止缓存雪崩。
    EXPIRE mykey 60  # 设置 mykey 的过期时间为 60 秒
    
  • TTL key: 获取 key 的剩余过期时间,单位为秒。-1 表示永不过期,-2 表示 key 不存在。
    TTL mykey  # 获取 mykey 的剩余过期时间
    
  • RENAME key newkey: 重命名 key。
    RENAME mykey newkey  # 将 mykey 重命名为 newkey
    

2. String 相关命令

  • SET key value [EX seconds] [PX milliseconds] [NX|XX]: 设置 key 的值为 value。EXPX 用于设置过期时间,NX 表示 key 不存在时才设置,XX 表示 key 存在时才设置。
    SET mykey myvalue EX 30  # 设置 mykey 的值为 myvalue,并设置过期时间为 30 秒
    
  • GET key: 获取 key 的值。
    GET mykey  # 获取 mykey 的值
    
  • INCR key: 将 key 的值加 1。如果 key 不存在,则先初始化为 0 再加 1。常用于实现计数器功能。在高并发场景下,需要注意原子性,防止并发问题。
    INCR mykey  # 将 mykey 的值加 1
    
  • DECR key: 将 key 的值减 1。用法与 INCR 类似。
    DECR mykey  # 将 mykey 的值减 1
    
  • APPEND key value: 将 value 追加到 key 的值末尾。
    APPEND mykey newvalue  # 将 newvalue 追加到 mykey 的值末尾
    

3. List 相关命令

  • LPUSH key value [value ...]: 将一个或多个 value 插入到列表 key 的表头 (左侧)。
    LPUSH mylist item1 item2  # 将 item1 和 item2 插入到 mylist 的表头
    
  • RPUSH key value [value ...]: 将一个或多个 value 插入到列表 key 的表尾 (右侧)。
    RPUSH mylist item1 item2  # 将 item1 和 item2 插入到 mylist 的表尾
    
  • LPOP key: 移除并返回列表 key 的头元素。
    LPOP mylist  # 移除并返回 mylist 的头元素
    
  • RPOP key: 移除并返回列表 key 的尾元素。
    RPOP mylist  # 移除并返回 mylist 的尾元素
    
  • LRANGE key start stop: 返回列表 key 中指定区间内的元素,区间以偏移量 startstop 指定。
    LRANGE mylist 0 2  # 返回 mylist 中索引 0 到 2 的元素
    

4. Hash 相关命令

  • HSET key field value: 将哈希表 key 中的字段 field 的值设为 value。
    HSET myhash field1 value1  # 将 myhash 中 field1 的值设为 value1
    
  • HGET key field: 获取哈希表 key 中给定字段 field 的值。
    HGET myhash field1  # 获取 myhash 中 field1 的值
    
  • HDEL key field [field ...]: 删除哈希表 key 中的一个或多个指定字段。
    HDEL myhash field1 field2  # 删除 myhash 中的 field1 和 field2
    
  • HGETALL key: 获取哈希表 key 中所有的字段和值。
    HGETALL myhash  # 获取 myhash 中所有的字段和值
    
  • HINCRBY key field increment: 为哈希表 key 中指定字段 field 的值加上增量 increment。
    HINCRBY myhash field1 1  # 将 myhash 中 field1 的值加 1
    

5. Set 相关命令

  • SADD key member [member ...]: 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
    SADD myset member1 member2  # 将 member1 和 member2 加入到 myset 中
    
  • SREM key member [member ...]: 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
    SREM myset member1 member2  # 移除 myset 中的 member1 和 member2
    
  • SMEMBERS key: 返回集合 key 中的所有成员。
    SMEMBERS myset  # 返回 myset 中的所有成员
    
  • SISMEMBER key member: 判断 member 元素是否集合 key 的成员。
    SISMEMBER myset member1  # 判断 member1 是否是 myset 的成员
    
  • SINTER key [key ...]: 返回给定所有集合的交集。
    SINTER set1 set2  # 返回 set1 和 set2 的交集
    

6. Sorted Set 相关命令

  • ZADD key score member [score member ...]: 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
    ZADD myzset 1 member1 2 member2  # 将 member1 和 member2 加入到 myzset 中,并分别设置 score 为 1 和 2
    
  • ZREM key member [member ...]: 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
    ZREM myzset member1 member2  # 移除 myzset 中的 member1 和 member2
    
  • ZRANGE key start stop [WITHSCORES]: 返回有序集 key 中,指定区间内的成员。WITHSCORES 可以显示 score。
    ZRANGE myzset 0 2 WITHSCORES  # 返回 myzset 中索引 0 到 2 的成员,并显示 score
    
  • ZREVRANGE key start stop [WITHSCORES]: 与 ZRANGE 类似,但按 score 从大到小排序。
    ZREVRANGE myzset 0 2 WITHSCORES  # 返回 myzset 中索引 0 到 2 的成员,并按 score 从大到小排序,并显示 score
    
  • ZSCORE key member: 返回有序集 key 中,成员 member 的 score 值。
    ZSCORE myzset member1  # 返回 myzset 中 member1 的 score 值
    

高并发场景下的 Redis 优化策略

  1. Pipeline 批量执行命令:在高并发场景下,频繁的网络通信会严重影响性能。使用 Pipeline 可以将多个命令一次性发送给 Redis 服务器,减少网络开销。例如,在批量插入数据时,使用 Pipeline 比逐条执行命令效率更高。
    import redis
    
    pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(connection_pool=pool)
    
    pipe = r.pipeline()
    for i in range(1000):
        pipe.set(f'key{i}', f'value{i}')
    pipe.execute()  # 批量执行命令
    
  2. 使用连接池:频繁创建和销毁 Redis 连接会消耗大量资源。使用连接池可以复用连接,减少资源开销。上面的代码示例中已经使用了连接池。
  3. 合理设置过期时间:避免缓存雪崩,可以采用随机过期时间,或者使用二级缓存。
  4. 使用 Redis 集群:当单台 Redis 服务器无法满足需求时,可以使用 Redis 集群进行横向扩展。常见的 Redis 集群方案有 Redis Cluster 和 Codis。在云服务器上部署 Redis 集群可以使用宝塔面板简化操作。
  5. 慢查询优化:定期检查 Redis 的慢查询日志,找出耗时较长的命令,进行优化。例如,可以考虑使用更高效的数据结构,或者优化查询逻辑。

实战避坑经验总结

  • 避免使用 KEYS 命令KEYS 命令会遍历所有 key,在大数据量的情况下会严重影响性能。可以使用 SCAN 命令替代。
  • 注意数据类型选择:不同的数据类型适用于不同的场景。例如,需要计数时,可以使用 String 类型的 INCR 命令;需要存储集合数据时,可以使用 Set 类型;需要存储有序数据时,可以使用 Sorted Set 类型。
  • 谨慎使用事务:Redis 的事务只能保证原子性,不能保证隔离性。在高并发场景下,如果对数据一致性要求较高,可以考虑使用 Lua 脚本。
  • 监控 Redis 状态:使用 Redis 的 INFO 命令可以获取 Redis 服务器的各种状态信息,例如内存使用情况、连接数、命令执行次数等。通过监控这些信息,可以及时发现潜在的问题。

掌握 Redis 命令大全是成为优秀后端工程师的必备技能。希望本文能够帮助你更好地理解和使用 Redis,并在高并发场景下进行性能优化。

Redis 命令速查:从入门到精通,核心命令实战详解与避坑指南

Redis 命令速查:从入门到精通,核心命令实战详解与避坑指南

转载请注明出处: 代码一只喵

本文的链接地址: http://m.acea4.store/blog/150763.SHTML

本文最后 发布于2026-04-01 21:35:30,已经过了26天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • i人日记 6 天前
    关于缓存雪崩,除了随机过期时间,还可以考虑使用互斥锁,避免大量请求同时穿透到数据库。
  • 雪碧透心凉 3 天前
    感谢分享,正准备用 Redis 做一个排行榜,Sorted Set 看起来很适合!
  • 月亮不营业 4 天前
    感谢分享,正准备用 Redis 做一个排行榜,Sorted Set 看起来很适合!