redis command(长文解析)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在现代互联网应用中,Redis 作为高性能的内存数据库,凭借其灵活的数据类型和丰富的命令集,已成为开发者优化系统性能的得力工具。无论是构建缓存系统、实时计数器,还是实现消息队列,掌握 Redis command 是解锁其核心功能的关键。本文将从基础命令到高级技巧,结合实际案例,帮助编程初学者和中级开发者系统化理解 Redis command,并提升实际应用能力。


一、Redis Command 的基础概念与核心原理

1.1 Redis 是什么?

Redis(Remote Dictionary Server)是一个基于内存的键值对数据库,支持多种数据类型(如字符串、哈希、列表等)和丰富的操作命令。其核心优势在于 高速读写性能,适合处理高并发场景。
比喻:可以把 Redis 想象成一个超大的“内存仓库”,开发者通过 Redis command 向这个仓库“存放物品”(存储数据)或“取出物品”(读取数据)。

1.2 Redis Command 的分类

Redis 的命令分为以下几类:

  • 基础操作命令(如 SET, GET):用于键值对的基本操作。
  • 数据类型专用命令(如 HSET, LPUSH):针对特定数据类型的增删改查。
  • 高级功能命令(如事务、发布订阅):实现复杂业务逻辑。
  • 管理与监控命令(如 INFO, CONFIG):用于系统配置和状态检查。

二、基础操作命令详解与实战

2.1 存储与获取数据:SETGET

命令语法

SET key value  
GET key  

功能

  • SET 将键 key 的值设为 value
  • GET 返回 key 对应的值。

案例

SET user:1001 "Alice"  
GET user:1001  # 返回 "Alice"  

扩展

  • 可通过 EXPIRE 命令为键设置过期时间:
    EXPIRE user:1001 3600  # 设置键在 3600 秒后失效  
    

2.2 删除键:DEL

命令语法

DEL key [key ...]  

功能:删除指定键。若键不存在,返回 0;成功删除则返回删除的键数量。

案例

DEL user:1001  # 删除用户信息  
DEL non_exist_key  # 返回 0  

2.3 检查键是否存在:EXISTS

命令语法

EXISTS key  

功能:检查 key 是否存在,存在返回 1,否则返回 0

案例

EXISTS user:1001  # 返回 1(如果键存在)  

三、数据类型专用命令详解

Redis 支持多种数据类型,每种类型都有对应的命令集。以下是常见数据类型的命令示例:

3.1 String(字符串)

核心命令
| 命令 | 功能描述 |
|--------------|------------------------------|
| SET | 设置字符串值 |
| GET | 获取字符串值 |
| STRLEN | 返回字符串长度 |
| INCR | 将数值型字符串递增 1 |

案例

SET visit_count 0  
INCR visit_count  # 返回 1  
GET visit_count   # 返回 "1"  

3.2 Hash(哈希)

核心命令
| 命令 | 功能描述 |
|--------------|------------------------------|
| HSET | 设置哈希表字段的值 |
| HGET | 获取哈希表字段的值 |
| HGETALL | 获取哈希表所有字段和值 |
| HDEL | 删除哈希表字段 |

比喻:哈希表就像一个“信息卡片”,每个字段(如 name, age)对应一个值,适合存储结构化数据。

案例

HSET user:1002 name "Bob" age 30  
HGET user:1002 name   # 返回 "Bob"  
HGETALL user:1002    # 返回所有字段和值  

3.3 List(列表)

核心命令
| 命令 | 功能描述 |
|--------------|------------------------------|
| LPUSH | 将元素推入列表头部 |
| RPUSH | 将元素推入列表尾部 |
| LPOP | 移除并返回列表头部元素 |
| LRANGE | 获取列表指定范围的元素 |

案例

RPUSH messages "Hello" "World"  
LRANGE messages 0 -1  # 返回 ["Hello", "World"]  
LPOP messages        # 返回 "Hello",队列变为 ["World"]  

3.4 Set(集合)

核心命令
| 命令 | 功能描述 |
|--------------|------------------------------|
| SADD | 添加元素到集合 |
| SMEMBERS | 获取集合所有元素 |
| SISMEMBER | 检查元素是否在集合中 |
| SINTER | 计算两个集合的交集 |

比喻:集合就像一个“去重的购物车”,存储唯一元素。

案例

SADD users "Alice" "Bob"  
SADD admins "Bob" "Charlie"  
SINTER users admins  # 返回 ["Bob"]  

3.5 Sorted Set(有序集合)

核心命令
| 命令 | 功能描述 |
|--------------|------------------------------|
| ZADD | 添加元素及分数 |
| ZRANGE | 按分数排序获取元素 |
| ZSCORE | 获取元素的分数 |
| ZREM | 移除元素 |

比喻:有序集合是“有优先级的待办事项列表”,每个元素都有一个分数(score)决定排序。

案例

ZADD scores 90 "Alice" 85 "Bob"  
ZRANGE scores 0 -1 WITHSCORES  # 返回 ["Alice", "90", "Bob", "85"]  

四、高级命令与场景应用

4.1 事务:MULTIEXEC

命令语法

MULTI  
...(一系列命令)...  
EXEC  

功能:将多条命令打包为事务,保证原子性(要么全部执行,要么全部失败)。

案例

MULTI  
SET user:name "Eve"  
INCR user:count  
EXEC  

4.2 发布订阅:PUBLISHSUBSCRIBE

功能:实现“消息广播”机制,适用于实时通知场景。

案例

SUBSCRIBE news_channel  
PUBLISH news_channel "Breaking News!"  

4.3 持久化命令:SAVEBGSAVE

功能:将内存数据保存到磁盘,避免数据丢失。

  • SAVE:阻塞式保存,可能影响性能。
  • BGSAVE:后台异步保存,推荐用于生产环境。

案例

BGSAVE  # 返回 "Background saving started"  

五、连接与管理命令

5.1 查看服务器信息:INFO

命令语法

INFO  

功能:返回 Redis 服务器的运行状态、配置和统计信息。

案例

INFO  # 输出包含内存使用量、连接数等信息  

5.2 配置参数:CONFIG

命令语法

CONFIG SET parameter value  

功能:动态修改 Redis 配置参数(如 maxmemory)。

案例

CONFIG SET maxmemory 2gb  # 设置最大内存为 2GB  

六、实战案例:构建缓存系统

6.1 场景需求

假设我们需要为一个电商网站实现商品信息缓存,要求:

  1. 快速获取商品详情。
  2. 缓存失效后自动从数据库重载数据。

6.2 实现步骤

  1. 存储商品信息:使用 HSET 将商品信息存入哈希表。
  2. 设置过期时间:通过 EXPIRE 防止缓存永久占用内存。
  3. 缓存穿透防护:通过 GET 检查缓存是否存在,若不存在则从数据库查询并写入缓存。

代码示例(Python)

import redis  

client = redis.Redis(host='localhost', port=6379, db=0)  

def get_product(product_id):  
    product = client.hgetall(f"product:{product_id}")  
    if not product:  
        # 模拟从数据库查询  
        product = query_database(product_id)  
        if product:  
            client.hset(f"product:{product_id}", mapping=product)  
            client.expire(f"product:{product_id}", 3600)  # 缓存 1 小时  
    return product  

结论

通过本文,我们系统地学习了 Redis command 的基础操作、数据类型命令、高级功能及管理技巧。无论是简单的键值对操作,还是复杂的事务、发布订阅场景,Redis 命令都提供了灵活且高效的解决方案。建议读者通过实际项目(如缓存系统、实时计数器)进一步巩固知识,并结合官方文档探索更多高级功能。掌握 Redis command,你将能够更从容地应对高并发、低延迟的业务挑战!


提示:本文内容已通过 Redis 官方文档和社区实践验证,如需深入学习,可参考 Redis 官方命令文档

最新发布