Redis 概览
一、Redis 核心概念
定义与定位
Redis(Remote Dictionary Server)是一个开源的内存键值数据库,支持多种数据结构(字符串、哈希、列表等),兼具缓存、消息队列、分布式锁等功能,适用于高性能、高并发场景。核心特性
- 高性能:单机读写吞吐量达 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 可视化内存、命中率等。
四、典型应用场景与案例
缓存加速
- 场景:数据库查询结果缓存(如商品详情)。
- 案例:南航机票查询响应从 7秒 → 100ms。
分布式锁
- 实现:
SETNX key value EX 30
(原子设值+过期防死锁)。
- 实现:
实时排行榜
- 实现:
Sorted Set
按分数排序(如游戏积分榜)。
- 实现:
社交网络
- 案例:新浪微博用
Hash
存关注列表,Sorted Set
生成热门微博 TopN。
- 案例:新浪微博用
消息队列
- 方案:
List
实现简单队列,Stream
支持多消费者。
- 方案:
五、学习路线与资源
30 天进阶计划
阶段 | 重点内容 | 资源推荐 |
---|---|---|
基础(1周) | 数据类型、持久化、Java集成 | https://redis.io/commands |
进阶(2周) | 集群架构、Lua脚本、性能调优 | 《Redis设计与实现》(黄健宏) |
高级(3周) | 源码分析(SDS字典、事件循环) | https://github.com/huangz1990/redis-3.0-annotated |
总结
Redis 的核心价值在于平衡高性能与功能多样性:
- 基础层:熟练使用数据类型与持久化是基石。
- 进阶层:集群设计与调优支撑高并发场景(如秒杀系统)。
- 专家层:源码理解(如单线程事件模型)解决深度性能瓶颈。
学习建议:先掌握缓存与会话管理等高频场景,再逐步深入分布式架构与源码,结合实战项目(如实现购物车或排行榜)巩固知识。