返回
Redis持久化探索之旅(十四)
后端
2024-02-10 04:41:57
Redis持久化探索之旅(十四)
文件大小
RDB的文件相对于AOF来说文件比较小,这里我们要注意下,一个是RDB形式存储的是数据集,数据集就是我们的数
据本身,一个是以AOF的形式存储的是命令,也就是说,AOF形式存储的是一个个的操作,那么同样数量的数据,如果是以命令的形式存储,它肯定要比以数据集的形式存储要大,因为这些命令本身就会占据一些空间,而不会把空间完全用在存放数据上,因此AOF的文件往往会比RDB的文件大。
这里以存一百万个键值对为例,使用string类型,那么在RDB形式下文件的大小是多少呢?经过实际测试,RDB文件的大小是4.9M左右。AOF形式下,同样是一百万个键值对,文件的大小是34M。
另外,这里的测试是在内存非常充足的情况下,Redis没有采用压缩策略,因为Redis默认不开启压缩策略,只有内存小于等于1GB的时候,才会开启压缩策略。
持久化策略
Redis提供了三种持久化策略,分别为:
- 总是持久化: 这种策略会把每次的写操作都持久化到磁盘上,这会导致频繁的磁盘写入,可能会对性能产生影响,但是在数据安全方面是最有保障的。
- 从不持久化: 这种策略完全不把数据持久化到磁盘上,Redis完全依赖内存来存储数据,这会导致Redis在宕机后丢失所有的数据,但是性能是最优的。
- 定时持久化: 这种策略会根据一定的时间间隔来进行持久化,既可以保证数据的安全性,又不会对性能产生太大的影响。
持久化配置
在Redis的配置文件中,我们可以配置持久化相关的信息,主要包括以下几个参数:
-
save: 这个参数可以配置定时持久化的策略,它有三个值可以选择,分别是:
- save
: 秒,如果至少有 个键被修改,则触发一次持久化。 - save
: 表示每隔秒,无论多少个键被修改,都触发一次持久化。 - save 900 1 300 10 60 10000: 这个是特殊的写法,它表示每隔900秒,如果至少有1个键被修改,则触发一次持久化。每隔300秒,如果至少有10个键被修改,则触发一次持久化。每隔60秒,如果至少有10000个键被修改,则触发一次持久化。
- save
-
stop-writes-on-bgsave-error: 这个参数可以配置在后台进行持久化时,如果遇到错误是否停止写操作,默认值为yes。
持久化机制
Redis提供了两种持久化机制,分别是:
- 快照持久化: 快照持久化会将当前整个Redis数据集以二进制的形式存储到磁盘上,这种持久化机制非常简单,而且速度很快,但是缺点是当Redis在进行持久化的时候,所有的写操作都会被阻塞,直到持久化完成。
- AOF持久化: AOF持久化会将Redis执行的每一条命令都记录到磁盘上,这种持久化机制速度较慢,但是优点是当Redis在进行持久化的时候,写操作不会被阻塞,而且AOF持久化可以通过配置appendfsync参数来控制持久化的时机,以达到兼顾性能和数据安全性的目的。
混合持久化
Redis还提供了一种混合持久化机制,它结合了快照持久化和AOF持久化的优点,既可以保证数据安全性,又不会对性能产生太大的影响。混合持久化机制的工作原理如下:
- Redis会先执行快照持久化,将当前整个Redis数据集以二进制的形式存储到磁盘上。
- 然后,Redis会继续执行AOF持久化,将执行的每一条命令都记录到磁盘上。
- 当Redis重启时,它会先加载快照文件,然后加载AOF文件,这样就可以恢复Redis在宕机前的数据。
总结
Redis提供了多种持久化方式和持久化策略,我们可以根据实际情况选择合适的持久化方式和持久化策略,以保证数据的安全性。希望这篇文章对您有所帮助,如果您有任何问题,欢迎随时与我联系。