Redis 详细介绍
1. Redis 是什么?
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对(Key-Value)数据库。它支持多种数据结构,可以用作:
- 数据库
- 缓存
- 消息中间件
- 队列
Redis 是完全开源免费的,使用 C 语言编写,遵守 BSD 协议,是一个高性能的 key-value 数据库。
2. Redis 的特点和功能
2.1 数据结构丰富
- String(字符串)
- Hash(哈希)
- List(列表)
- Set(集合)
- Sorted Set(有序集合)
- Bitmap(位图)
- HyperLogLog(基数统计)
- GEO(地理信息定位)
2.2 功能特性
- 支持数据持久化
- 支持主从复制
- 支持事务
- 支持 Lua 脚本
- 支持发布/订阅模式
- 支持键过期策略
- 支持多种客户端语言
3. Redis 为什么能这么快?
Redis 的速度可以达到 10 万+ 的 QPS(每秒查询次数) 但它却进程却是单线程模型,因为 redis 完全是基于内存操作,CPU 不是 redis 的瓶颈,redis 最大的瓶颈可能是机器的内存和网络的带宽;
基于内存操作
- 数据存储在内存中,读写速度快
- 避免了磁盘 I/O 的开销
单线程模型
- 避免了多线程的上下文切换和竞争条件
- 不需要考虑各种锁的问题
- 单线程处理命令,保证了原子性
高效的数据结构
- 使用哈希表作为底层实现
- 优化的数据结构设计
- 合理的内存分配策略
I/O 多路复用
- 使用 epoll 作为 I/O 多路复用技术的实现
- 非阻塞 I/O
- 单线程处理多个客户端连接
4. Redis 持久化
为什么需要持久化
比如 redis 里有 10gb 数据,突然停电或者意外宕机了,再启动的时候 10gb 都没了!所以需要持久化,宕机后再通过持久化文件将数据恢复。
4.1 RDB 快照(Redis Database)
- 按照指定的时间间隔对数据进行快照存储
- 优点:
- 文件紧凑,适合备份
- 恢复速度快
- 适合大规模数据恢复
- 缺点:
- 可能丢失最后一次快照后的数据
- 不适合频繁写入场景
4.2 AOF 文件(Append Only File)
- 记录所有写操作命令
- 优点:
- 数据安全性高
- 可读性好
- 缺点:
- 文件体积大
- 恢复速度慢
5. Redis 缓存的淘汰策略
| 策略 | 说明 | 适用场景 |
|---|---|---|
| noeviction | 不淘汰,内存不足时报错 | 对数据一致性要求高的场景 |
| allkeys-lru | 所有键中最近最少使用的淘汰 | 热点数据访问场景 |
| volatile-lru | 设置了过期时间的键中最近最少使用的淘汰 | 需要过期时间的场景 |
| allkeys-random | 所有键中随机淘汰 | 数据访问均匀的场景 |
| volatile-random | 设置了过期时间的键中随机淘汰 | 需要过期时间的随机淘汰场景 |
| volatile-ttl | 设置了过期时间的键中即将过期的淘汰 | 优先淘汰即将过期的数据 |
6. Redis 集群模式选择
提示
redis 集群有三种模式 1.主从复制 2.哨兵模式 3.Cluster 集群模式
主从复制:选取有三台(奇数)服务器,一主两从,主节点负责写入,从节点负责读取,达到读写分离,此时三台集群上的数据一致,但是有个不好的点在于 当主节点挂了的话,就需要人为操作,来重启主节点。
哨兵模式:哨兵模式在原有主从复制的基础上加了哨兵机制,简单理解就是监测各个节点活性,假如主节点挂了,还可以自动重启主节点。
Cluster 集群模式:将数据均分到所有主节点上。与主从复制不同,集群中的节点不存储全量数据,而是分片存储。这种方式适合数据量较大的场景,可以均摊服务器压力
