8.1.1 Redis简介与应用场景

Redis简介与应用场景#

Redis(Remote Dictionary Server)是高性能的内存键值数据库,支持多种数据结构与原子操作,具备持久化、复制、哨兵与集群等高可用能力。其核心优势在于低延迟、高吞吐、丰富的数据结构与生态工具,使其成为互联网与企业应用中常见的缓存与实时数据平台。

原理草图(简化架构)#

文章图片

核心特性概览#

  • 内存存储与高性能:基于内存读写,适合高并发访问与低延迟场景
  • 多数据结构:String、Hash、List、Set、ZSet 及扩展类型
  • 原子性与脚本:单线程模型保证命令原子性,支持 Lua 脚本
  • 持久化机制:RDB、AOF 提供数据落盘能力
  • 高可用与扩展:主从复制、哨兵、Cluster 分片
  • 丰富生态:客户端完善,易与各类应用框架集成

典型应用场景与对应能力#

  1. 缓存加速:热点数据缓存、降低数据库压力、TTL 生命周期管理
  2. 会话与登录态:Session 存储、Token/验证码一次性校验
  3. 排行榜与计数器:ZSet 排行榜、String 自增统计
  4. 消息队列与任务调度:List/Stream 实现队列与消费
  5. 分布式锁与限流:SET NX EX 构建锁、令牌桶限流
  6. 实时数据与地理位置:Geo 位置检索、Bitmap/HyperLogLog 去重

安装与快速验证(示例)#

以 Ubuntu/Debian 为例,安装并验证服务可用:

# 1) 安装
sudo apt-get update
sudo apt-get install -y redis-server

# 2) 查看版本与启动状态
redis-server -v
sudo systemctl status redis-server

# 3) 连接与基础验证
redis-cli -h 127.0.0.1 -p 6379 ping
# 预期输出:PONG

基本命令与效果说明(最小可运行示例)#

# 连接 Redis
redis-cli -h 127.0.0.1 -p 6379

# 设置/读取键值(String)
SET user:1:name "alice"     # 写入字符串
GET user:1:name             # 读取字符串,预期输出 alice

# 设置过期时间
SETEX session:1 60 "token"  # 60 秒后自动过期
TTL session:1               # 查看剩余秒数

# 查看运行信息
INFO server                 # 查看服务端基础信息
DBSIZE                      # 当前库键数量

典型场景小示例(缓存穿透防护)#

# 使用空值缓存避免重复查询(示例)
GET product:9999
# 如果不存在则写入短 TTL 的占位值
SETEX product:9999 30 "null"

常见安装与连接故障排查#

  1. 无法连接
    - 检查服务状态:systemctl status redis-server
    - 检查端口:ss -lntp | grep 6379
    - 检查绑定地址:/etc/redis/redis.confbind 127.0.0.1
  2. 权限或保护模式错误(denied)
    - 检查 protected-mode yesrequirepass
  3. 端口占用
    - lsof -i:6379 查找占用进程并确认是否为预期实例

适用与边界#

  • 适合:高频访问、对延迟敏感、可容忍短暂不一致的业务
  • 不适合:超大数据量持久存储、复杂查询与强事务需求场景

练习题#

  1. 安装 Redis 并完成 PINGSETGET 的基本验证。
  2. 写入一个带 TTL 的键并观察 TTL 变化过程。
  3. 模拟缓存穿透:不存在的键写入 30 秒空值并验证过期后自动清理。