xDocxDoc
AI
前端
后端
iOS
Android
Flutter
AI
前端
后端
iOS
Android
Flutter
  • Redis 新手指南

    • Redis 概览
    • Redis 基础
    • Redis 高级用法与进阶指南
    • Redis基本事务操作详解

Redis 概览

一、Redis 核心概念

  1. 定义与定位
    Redis(Remote Dictionary Server)是一个开源的内存键值数据库,支持多种数据结构(字符串、哈希、列表等),兼具缓存、消息队列、分布式锁等功能,适用于高性能、高并发场景。

  2. 核心特性

    • 高性能:单机读写吞吐量达 10万+ QPS(因内存存储与非阻塞I/O)。
    • 丰富的数据类型:
      • String:文本、计数器(INCR)
      • Hash:对象属性存储(如用户信息)
      • List:消息队列(LPUSH/RPOP)
      • Set:去重集合(共同好友)
      • Sorted Set:排行榜(ZADD/ZRANGE)
      • 扩展类型:Bitmap(位操作)、HyperLogLog(基数统计)。
    • 持久化:
      • RDB:定时快照,恢复快但可能丢数据。
      • AOF:记录写操作日志,数据更安全。
    • 原子性:所有操作单命令原子,事务(MULTI/EXEC)支持多命令原子执行。

二、基础用法与命令示例

1. 数据类型操作

# String(缓存/计数器)
SET user:1001:name "Alice" EX 3600  # 设置带过期时间
GET user:1001:name
INCR article:2001:views

# Hash(存储对象)
HSET user:1001 age 25 city "Beijing"
HGETALL user:1001

# List(消息队列)
LPUSH tasks "task1"
RPOP tasks

# Sorted Set(排行榜)
ZADD leaderboard 95 "Alice" 80 "Bob"
ZREVRANGE leaderboard 0 2 WITHSCORES  # 取TOP3

2. 管理命令

KEYS user:*        # 匹配键(生产慎用)
EXPIRE key 60      # 设置过期
DEL key            # 删除键
INFO memory        # 监控内存

3. Java 集成示例

// Spring Boot 配置
@Bean
public RedisTemplate<String, Object> redisTemplate() {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory());
    template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
    return template;
}

// 分布式锁实现
public boolean tryLock(String key, String value, long expireSec) {
    return redisTemplate.opsForValue().setIfAbsent(key, value, expireSec, TimeUnit.SECONDS);
}

三、进阶学习路线

1. 高级特性

主题内容重点
持久化调优RDB/AOF混合配置、fsync策略(everysec平衡性能与安全)
集群架构主从复制 → 哨兵(故障转移)→ Cluster分片(数据水平扩展)
Lua脚本原子执行复杂逻辑(如库存扣减)
Stream消息队列替代Pub/Sub,支持消费者组(XADD/XREADGROUP)

2. 性能优化

  • 内存管理:
    • 使用ziplist压缩小哈希,避免BigKey(单Key数据过大)。
    • 配置maxmemory-policy allkeys-lru淘汰旧数据。
  • 高并发优化:
    • Pipeline批量命令减少网络往返。
    • 连接池配置(如maxTotal=20)。

3. 运维与监控

  • 监控指标:
    INFO stats      # 命令统计
    SLOWLOG GET 10  # 慢查询分析
  • 告警工具:Prometheus + Grafana 可视化内存、命中率等。

四、典型应用场景与案例

  1. 缓存加速

    • 场景:数据库查询结果缓存(如商品详情)。
    • 案例:南航机票查询响应从 7秒 → 100ms。
  2. 分布式锁

    • 实现:SETNX key value EX 30(原子设值+过期防死锁)。
  3. 实时排行榜

    • 实现:Sorted Set按分数排序(如游戏积分榜)。
  4. 社交网络

    • 案例:新浪微博用 Hash 存关注列表,Sorted Set 生成热门微博 TopN。
  5. 消息队列

    • 方案:List 实现简单队列,Stream 支持多消费者。

五、学习路线与资源

30 天进阶计划

阶段重点内容资源推荐
基础(1周)数据类型、持久化、Java集成https://redis.io/commands
进阶(2周)集群架构、Lua脚本、性能调优《Redis设计与实现》(黄健宏)
高级(3周)源码分析(SDS字典、事件循环)https://github.com/huangz1990/redis-3.0-annotated

总结

Redis 的核心价值在于平衡高性能与功能多样性:

  • 基础层:熟练使用数据类型与持久化是基石。
  • 进阶层:集群设计与调优支撑高并发场景(如秒杀系统)。
  • 专家层:源码理解(如单线程事件模型)解决深度性能瓶颈。

学习建议:先掌握缓存与会话管理等高频场景,再逐步深入分布式架构与源码,结合实战项目(如实现购物车或排行榜)巩固知识。

最后更新: 2025/8/26 10:07
Next
Redis 基础