8.1.1 Redis简介与应用场景
Redis简介与应用场景#
Redis(Remote Dictionary Server)是高性能的内存键值数据库,支持多种数据结构与原子操作,具备持久化、复制、哨兵与集群等高可用能力。其核心优势在于低延迟、高吞吐、丰富的数据结构与生态工具,使其成为互联网与企业应用中常见的缓存与实时数据平台。
原理草图(简化架构)#
核心特性概览#
- 内存存储与高性能:基于内存读写,适合高并发访问与低延迟场景
- 多数据结构:String、Hash、List、Set、ZSet 及扩展类型
- 原子性与脚本:单线程模型保证命令原子性,支持 Lua 脚本
- 持久化机制:RDB、AOF 提供数据落盘能力
- 高可用与扩展:主从复制、哨兵、Cluster 分片
- 丰富生态:客户端完善,易与各类应用框架集成
典型应用场景与对应能力#
- 缓存加速:热点数据缓存、降低数据库压力、TTL 生命周期管理
- 会话与登录态:Session 存储、Token/验证码一次性校验
- 排行榜与计数器:ZSet 排行榜、String 自增统计
- 消息队列与任务调度:List/Stream 实现队列与消费
- 分布式锁与限流:SET NX EX 构建锁、令牌桶限流
- 实时数据与地理位置: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"
常见安装与连接故障排查#
- 无法连接
- 检查服务状态:systemctl status redis-server
- 检查端口:ss -lntp | grep 6379
- 检查绑定地址:/etc/redis/redis.conf中bind 127.0.0.1 - 权限或保护模式错误(denied)
- 检查protected-mode yes和requirepass - 端口占用
-lsof -i:6379查找占用进程并确认是否为预期实例
适用与边界#
- 适合:高频访问、对延迟敏感、可容忍短暂不一致的业务
- 不适合:超大数据量持久存储、复杂查询与强事务需求场景
练习题#
- 安装 Redis 并完成
PING、SET、GET的基本验证。 - 写入一个带 TTL 的键并观察
TTL变化过程。 - 模拟缓存穿透:不存在的键写入 30 秒空值并验证过期后自动清理。