详解Redis 核心特性与基础

Redis 核心特性与基础详解(结合实例)

Redis(Re mote Di ctionary S ervice)是一个开源的内存数据库 ,以高性能灵活的数据结构著称。它被广泛用于缓存、消息队列、实时排行榜等场景。下面通过实际案例和操作,深入浅出地解析 Redis 的核心特性。


一、核心特性概览
  1. 内存存储,超高性能 :数据存储在内存中,读写速度达10万+/秒
  2. 丰富的数据结构:支持字符串、哈希、列表、集合、有序集合等。
  3. 持久化 :通过 RDB 和 AOF 机制保障数据不丢失(详见之前的持久化详解)。
  4. 高可用与扩展:支持主从复制、哨兵(Sentinel)、集群(Cluster)。
  5. 原子操作与事务:支持简单事务和 Lua 脚本,保证操作原子性。

二、核心数据结构与使用场景
1. 字符串(String)
  • 本质:最简单的键值对,值可以是文本、数字或二进制数据。

  • 常用命令

    bash 复制代码
    SET user:1 "Alice"       # 存储用户信息
    GET user:1               # 获取用户信息
    INCR article:1001:views  # 文章阅读量+1(原子操作)
  • 场景

    • 缓存:存储用户会话、页面缓存。
    • 计数器:文章阅读量、商品库存。

示例:记录商品库存

bash 复制代码
> SET product:1001:stock 100  # 初始化库存为100
> DECR product:1001:stock     # 扣减库存,返回99

2. 哈希(Hash)
  • 本质:键值对的集合,适合存储对象。

  • 常用命令

    bash 复制代码
    HSET user:1001 name "Bob" age 30  # 存储用户字段
    HGET user:1001 name               # 获取用户名
    HGETALL user:1001                 # 获取所有字段
  • 场景

    • 用户资料:存储多个字段(姓名、年龄、地址)。
    • 商品详情:价格、库存、描述等属性。

示例:存储电商商品信息

bash 复制代码
> HSET product:2001 title "iPhone 15" price 6999 stock 50
> HINCRBY product:2001 stock -1  # 扣减库存,返回49

3. 列表(List)
  • 本质:有序元素集合,支持双向插入/删除。

  • 常用命令

    bash 复制代码
    LPUSH news:latest "Article A"  # 左侧插入文章
    RPUSH news:latest "Article B"  # 右侧插入文章
    LRANGE news:latest 0 2         # 获取前3篇文章
  • 场景

    • 消息队列:实现生产者-消费者模型。
    • 最新动态:展示用户最近浏览记录。

示例:构建简单消息队列

bash 复制代码
# 生产者发送消息
> LPUSH msg:queue "Task: Backup DB"
# 消费者获取消息
> RPOP msg:queue  # 返回"Task: Backup DB"

4. 集合(Set)
  • 本质:无序且元素唯一的集合,支持交并差运算。

  • 常用命令

    bash 复制代码
    SADD tags:article:1001 "tech" "database"  # 添加标签
    SMEMBERS tags:article:1001                # 查看所有标签
    SINTER tags:article:1001 tags:user:1      # 求交集(共同标签)
  • 场景

    • 标签系统:文章标签、用户兴趣。
    • 抽奖去重:确保用户不重复中奖。

示例:统计共同好友

bash 复制代码
> SADD user:1001:friends "user:2001" "user:2002"
> SADD user:1002:friends "user:2001" "user:2003"
> SINTER user:1001:friends user:1002:friends  # 返回共同好友"user:2001"

5. 有序集合(ZSet)
  • 本质:元素按分数(score)排序的集合,适合排行榜。

  • 常用命令

    bash 复制代码
    ZADD leaderboard 1000 "PlayerA"  # 添加玩家得分
    ZREVRANGE leaderboard 0 2 WITHSCORES  # 查看前三名
    ZRANK leaderboard "PlayerA"      # 查看玩家排名
  • 场景

    • 实时排行榜:游戏得分、热搜榜单。
    • 延迟队列:按执行时间排序的任务队列。

示例:游戏玩家排行榜

bash 复制代码
> ZADD game:rank 1500 "Alice"  # Alice得分1500
> ZADD game:rank 1800 "Bob"    # Bob得分1800
> ZREVRANGE game:rank 0 -1 WITHSCORES  # 返回["Bob", 1800, "Alice", 1500]

三、其他核心功能
1. 过期时间与自动删除
  • 本质:为键设置生存时间(TTL),到期自动删除。

  • 常用命令

    bash 复制代码
    SET session:1234 "{...}" EX 3600  # 会话1小时后过期
    TTL session:1234                 # 查看剩余生存时间(秒)
  • 场景

    • 会话缓存:用户登录态自动失效。
    • 限时优惠:促销活动倒计时。

2. 事务(Transactions)
  • 本质:将多个命令打包执行(类似数据库事务),但不支持回滚。

  • 操作步骤

    bash 复制代码
    MULTI                   # 开启事务
    SET balance:Alice 1000
    DECRBY balance:Alice 100
    EXEC                    # 提交执行(或 DISCARD 取消)
  • 注意 :Redis 事务是原子性的,但中间命令出错不会回滚已执行的命令。


3. 发布订阅(Pub/Sub)
  • 本质:消息通信模式,生产者发布消息,消费者订阅频道。

  • 常用命令

    bash 复制代码
    # 消费者订阅频道
    SUBSCRIBE news:tech
    # 生产者发布消息
    PUBLISH news:tech "Redis 7.0 released!"
  • 场景

    • 实时通知:订单状态更新、系统告警。

四、高可用与扩展
1. 主从复制(Replication)
  • 原理:主节点(Master)异步复制数据到从节点(Slave),实现读写分离。

  • 配置步骤

    1. 启动主节点(默认模式)。

    2. 在从节点配置文件(redis.conf)中添加:

      bash 复制代码
      replicaof <master-ip> <master-port>
  • 示例:电商系统将读请求分流到从节点,减轻主节点压力。


2. 哨兵(Sentinel)
  • 原理:监控主从节点,自动故障转移(主节点宕机时选举新主)。
  • 配置步骤
    1. 创建哨兵配置文件 sentinel.conf

      bash 复制代码
      sentinel monitor mymaster 127.0.0.1 6379 2  # 监控主节点
      sentinel down-after-milliseconds mymaster 5000  # 5秒无响应判定宕机
    2. 启动哨兵:

      bash 复制代码
      redis-sentinel sentinel.conf

3. 集群(Cluster)
  • 原理:数据分片存储在多个节点,支持水平扩展。
  • 操作步骤
    1. 创建集群(至少3主3从):

      bash 复制代码
      redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 ... --cluster-replicas 1
    2. 客户端连接集群:

      bash 复制代码
      redis-cli -c -p 7000  # -c 表示启用集群模式

五、实战:使用 Redis 实现文章投票系统

需求:用户可为文章投票,每篇文章最多投1票,按票数实时排行。

1. 数据结构设计
  • 文章信息:哈希存储(标题、作者、发布时间等)。
  • 文章得分:有序集合(按票数和时间排序)。
  • 用户投票记录:集合(记录已投票的用户)。
2. 关键操作
bash 复制代码
# 发布文章
HMSET article:1001 title "Redis Guide" author "Alice" time 1630000000
# 用户投票(原子操作:检查是否已投票 + 更新得分)
WATCH article:1001:votes  # 开启乐观锁
MULTI
SADD user:2001:votes 1001  # 记录用户投票
ZINCRBY article:scores 432 article:1001  # 432=票数*权重 + 时间衰减
EXEC

六、总结
  • 核心优势
    • 数据结构多样性:灵活应对不同场景。
    • 内存级速度:适用于高并发读写。
    • 高可用架构:主从复制、哨兵、集群保障稳定性。
  • 学习路径
    1. 掌握基础数据结构(String/Hash/List/Set/ZSet)。
    2. 熟悉事务、过期时间、Pub/Sub 等进阶功能。
    3. 部署高可用架构(主从、哨兵、集群)。

行动建议

  • 本地安装 Redis,通过 redis-cli 练习基础命令。
  • 结合业务场景(如缓存、排行榜)设计数据结构。
  • 生产环境优先使用哨兵或集群保障高可用。

通过理解这些核心特性,你可以充分发挥 Redis 的潜力,构建高性能、可靠的应用系统!

相关推荐
Full Stack Developme2 小时前
SQL 版本历史
数据库·sql
杰克逊的日记4 小时前
mysql数据实时全量+增量迁移
数据库·mysql·数据迁移
linuxxx1105 小时前
centos7 升级MariaDB 到 10.5 或更高版本
数据库·mariadb
换个网名有点难5 小时前
django怎么配置404和500
数据库·django
Adellle6 小时前
MySQL
数据库·后端·mysql
就是有点傻6 小时前
C# 中实现一个线程持续读取,另一个线程负责写入,且写入时读取线程暂停
数据库·c#
云观秋毫7 小时前
试试智能体工作流,自动化搞定运维故障排查
运维·数据库·自动化
是沫沫子耶7 小时前
mysql实例
数据库
比钻石还闪亮的nan人7 小时前
CentOS 7下安装PostgreSQL 15
数据库·postgresql
Full Stack Developme7 小时前
SQL 集合运算
数据库·sql