简介
Redis 是一个内存数据库,既然数据都是存放在内存中,当服务器重启或宕机就会导致内存数据丢失,如果 Redis 仅仅做为一个缓存服务器来使用的话,这个并没有什么影响,但是做为内存数据库,这问题可就大了,当服务器出现重启或者宕机的现象,Redis 中存储的登录信息、购物车信息、用户浏览记录等数据都会被清空,这样的后果是无法接受的,那么我们怎么像关系型数据库那样,为 Redis 做持久化呢?Redis 给提供了两种解决方案,下面我们就来对这两种方案进行一下讲解和演示。
什么是持久化?
把内存中的数据持保存到磁盘。这个过程就是持久化。 当redis启动时会从磁盘上读取数据并加载到内存。
redis持久化的方式
Redis 是一个内存数据库,为了保证数据的持久性,它提供了两种持久化方案:
1、 RDB 方式(默认)
2、 AOF 方式
RDB:以快照的方式进行持久化。 在一定时间间隔内进行快照。把数据保存到磁盘;Redis会在指定的情况下触发快照. ----默认dump.rdb
- save命令
- bgsave命令
- 配置redis配置文件。
save和bgsave的区别
执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
执行完成的时候如果存在老的RDB文件,新的就会代替掉旧的,我们的客户端可能都是几万或者几十万,显然这种方式不可取。
执行bgsava命令时,Redis会在后台一部进行快照操作,快照同时还可以响应客户端请求,具体流程如下:
通过配置文件来触发RDB ----- bgsave命令
RDB持久化方式的优缺点
有点:
- RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
- bgsave生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
- RDB在恢复大数据集时的速度比AOF的恢复速度要快。
缺点:
- 快照持久化期间修改的数据不会被保存,可能丢失数据。数据完整性比较差。
什么时候会触发aof
AOF默认是没有开启。需要配置手动开启。
调整完还是没有aof文件这时你需要重新启动redis(结束进程)
ps -ef | grep redis
kill -9 “你电脑上redis的端口号”
redis-server redis.conf
redis-cli
save
aof的优缺点
优点
- AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数
- AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
- AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
缺点
- 对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大.
- 恢复数据时时间要比快照模式慢很多。