什么是Redis持久化?
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失
为什么要做Redis持久化?
持久化的目的是做灾难恢复,当redis宕机时,能尽快恢复缓存数据,对外提供服务。有人会问,redis不是缓存吗,为什么要持久化呢,直接重启继续提供服务不就好了吗?
如果redis刚刚恢复,之前的缓存都无法命中,就会全部请求到数据库,直接导致mysql也雪崩
Redis的持久化机制是什么?
Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:
- RDB:在指定时间间隔,执行数据集的时间点快照将Redis的数据集保存到一个RDB文件中
- AOF:以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
RDB和AOF机制的优缺点?
RED | AOF | |
---|---|---|
优点 |
|
|
缺点 |
|
|
如何选择合适的持久化方式?
考虑因素:
- 数据安全性要求:如果数据的安全性是最重要的考虑因素,可以选择AOF持久化机制;AOF以追加日志的方式记录每个写操作,可以保证数据的完整性和一致性
- 恢复速度要求:如果需要快速恢复数据,可以选择RDB持久化机制;RDB文件是一个紧凑的二进制文件,可以快速加载整个数据集
- 磁盘空间和网络带宽:如果对磁盘空间和网络带宽有限制,可以考虑使用RDB持久化机制;RDB文件是紧凑的二进制文件,相对于AOF文件会占用更少的磁盘空间和网络带宽
- 备份和灾难恢复:如果需要进行备份和灾难恢复,可以选择RDB持久化机制;RDB文件可以用于快速备份和恢复数据
- 双重保护:为了提高数据的安全性和可靠性,可以同时使用RDB和AOF持久化机制;RDB可以用于快速备份和恢复数据,AOF可以提供更高的数据安全性
Redis持久化数据和缓存怎么做扩容?
持久化数据的扩容 | 缓存的扩容 |
---|---|
RDB持久化:如果使用RDB持久化机制,可以通过增加更多的Redis实例来扩容、每个实例都会生成自己的RDB文件,可以将数据分散到多个实例中进行持久化 | 分片:可以将缓存数据分片到多个Redis实例中,每个实例负责一部分数据、可以通过哈希算法或者一致性哈希算法来确定数据属于哪个实例 |
AOF持久化:如果使用AOF持久化机制,可以通过增加更多的Redis实例来扩容、每个实例都会追加自己的AOF日志文件,可以将写操作分散到多个实例中进行持久化 | 集群:可以使用Redis Cluster来搭建一个分布式缓存集群、Redis Cluster将数据分片到多个节点上,并提供自动的故障转移和数据重分布功能 |
- 数据一致性:在扩容过程中,需要确保数据的一致性、可以使用数据迁移工具或者自定义脚本来将数据从旧的实例迁移到新的实例上
- 负载均衡:在扩容后,需要确保数据和请求能够均匀地分布到各个实例上、可以使用负载均衡器或者代理来实现请求的均衡分发