Redis 核心特点
Redis的核心特点使其成为最受欢迎的内存数据库之一,理解这些特点是正确使用Redis的基础。
高性能
内存存储
Bash
- 数据存储在内存中
- 读写速度极快
- 单机可达10万+ QPS
- 响应时间微秒级
单线程模型
Bash
Redis主线程是单线程的:
- 避免多线程竞争开销
- 无锁操作,效率高
- 纯内存操作,速度快
单线程不意味着性能差,内存操作本身就是微秒级。
IO多路复用
Bash
使用epoll/kqueue实现:
- 单线程处理多个连接
- 非阻塞IO
- 高并发处理能力
为什么单线程高效
Bash
1. 纯内存操作:CPU不是瓶颈
2. 避免锁竞争:无需加锁开销
3. IO多路复用:高效处理连接
4. 简单可靠:无并发Bug
丰富数据结构
五种基本类型
text
String(字符串):最基本类型,存储文本、数字
Hash(哈希):键值对集合,适合对象
List(列表):有序可重复,双向链表
Set(集合):无序不重复,支持交集运算
ZSet(有序集合):带分数排序,适合排行榜
高级数据结构
text
Bitmap(位图):位操作,适合统计
HyperLogLog:基数统计,节省空间
Geo(地理):地理位置,距离计算
Stream(流):消息队列,支持消费组
数据结构优势
text
- 原生支持,无需应用层实现
- 高效内部编码,节省内存
- 丰富的操作命令
- 支持复杂业务场景
持久化能力
RDB快照
text
特点:
- 定时保存内存快照
- 文件紧凑,适合备份
- 恢复速度快
- 可能丢失最后一次快照后的数据
AOF日志
text
特点:
- 记录所有写命令
- 数据安全,最多丢失1秒
- 文件可读,便于分析
- 支持重写压缩
混合持久化
text
Redis 4.0+支持:
- RDB快照 + AOF增量
- 结合两者优点
- 推荐生产使用
高可用与分布式
主从复制
text
- 一主多从架构
- 实时数据同步
- 从节点可读
- 故障转移基础
哨兵模式
text
- 监控主从状态
- 自动故障检测
- 自动故障转移
- 配置中心功能
Redis Cluster
text
- 分布式集群
- 数据自动分片
- 无中心架构
- 自动故障转移
- 支持在线扩缩容
支持事务
事务命令
text
# 开启事务
MULTI
# 命令入队
SET key1 value1
SET key2 value2
# 执行事务
EXEC
# 取消事务
DISCARD
事务特点
text
- 命令批量执行
- 保证原子性(无其他命令插入)
- 不支持回滚(某命令失败不影响其他)
Redis事务不保证全部成功或失败,命令错误不影响其他命令执行。
发布订阅
消息模式
text
# 发布消息
PUBLISH channel message
# 订阅频道
SUBSCRIBE channel
# 模式订阅
PSUBSCRIBE channel*
# 取消订阅
UNSUBSCRIBE channel
应用场景
text
- 消息推送
- 实时通知
- 事件广播
- 简单消息队列
Lua脚本
脚本执行
text
# 执行Lua脚本
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
# 加载脚本
SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])"
# 执行已加载脚本
EVALSHA sha1 1 key value
脚本优势
text
- 原子执行:多条命令不可打断
- 减少网络开销:一次发送多条命令
- 复杂逻辑:条件判断、循环
内存优化
内部编码
text
String:int, embstr, raw
Hash:ziplist, hashtable
List:ziplist, linkedlist, quicklist
Set:intset, hashtable
ZSet:ziplist, skiplist
自动编码转换
text
Redis根据数据自动选择编码:
- 小数据用紧凑编码(ziplist)
- 大数据用标准编码(hashtable)
- 用户无需关心编码细节
支持过期
过期设置
text
# 设置过期时间
EXPIRE key 3600 # 3600秒后过期
# 查看剩余时间
TTL key
# 移除过期
PERSIST key
过期策略
text
惰性删除:访问时检查并删除
定期删除:周期性随机检查删除
内存淘汰:内存满时按策略淘汰
特点对比
| 特点 | 说明 | 优势 |
|---|---|---|
| 高性能 | 内存+单线程+IO多路复用 | 10万+QPS |
| 丰富结构 | 5种基础+4种高级 | 适配多种场景 |
| 持久化 | RDB+AOF+混合 | 数据安全 |
| 分布式 | Cluster集群 | 水平扩展 |
| 事务 | MULTI/EXEC | 批量原子 |
| Lua | 脚本执行 | 复原子操作 |
要点总结
- 高性能源于内存存储、单线程模型、IO多路复用
- 支持5种基础+4种高级数据结构,适配多种场景
- RDB快照+AOF日志保障数据安全,推荐混合持久化
- 主从复制+哨兵+Cluster实现高可用和分布式
- 事务保证命令批量执行,但不支持回滚
- Lua脚本实现复杂原子操作
- 自动编码优化内存使用,用户无需关心细节
- 过期机制自动清理数据,支持多种淘汰策略
📝 发现内容有误?点击此处直接编辑