第一种持久化方案:bgsave

比如说先存储一个name为zhangsan的数据

redis 从硬盘读写 redis磁盘_缓存


客户端查看:

redis 从硬盘读写 redis磁盘_redis 从硬盘读写_02


假设意外宕机了:

redis 从硬盘读写 redis磁盘_缓存_03


此时查看数据库已经不在了:

redis 从硬盘读写 redis磁盘_持久化_04


所以引入了bgsave:

redis 从硬盘读写 redis磁盘_持久化_05


再次宕机测试,发现数据此时任然存在:

redis 从硬盘读写 redis磁盘_redis_06


优点:命令简单,方便操作
缺点:需要频繁使用这个命令

第二种方案持久化方案:rdb

查询配置可以发现:

redis 从硬盘读写 redis磁盘_缓存_07


redis 从硬盘读写 redis磁盘_缓存_08


dir ./说明在本地

打开之后

redis 从硬盘读写 redis磁盘_缓存_09


看不懂,继续找配置文件,可以发现:

redis 从硬盘读写 redis磁盘_数据_10


这个就是rdb持久化方案的配置文件:

save 900 1:900秒之内只有有一个key的值发生变化把数据持久化入磁盘

添加一个用于测试:

redis 从硬盘读写 redis磁盘_redis_11


改变配置后重新启动进程,执行

redis 从硬盘读写 redis磁盘_缓存_12


等待10s之后宕机,在重启之后发现数据任然存在

redis 从硬盘读写 redis磁盘_数据_13


优点:省心,做了配置之后自动化持久化数据到磁盘
缺点:假设60s有10000个key发生变化,结果58s宕机,这8s的数据redis没有保存进去
第三种持久化方案:aof

查看配置文件:

redis 从硬盘读写 redis磁盘_缓存_14


这里把他改成yes

可以发现多了个文件:

redis 从硬盘读写 redis磁盘_数据_15

修改配置文件后重启,执行

redis 从硬盘读写 redis磁盘_数据_16


查看端口ps -ef | grep redis

然后意外宕机kill -9 你的端口,再重启发现数据任然存在

redis 从硬盘读写 redis磁盘_持久化_17


打开appendonly.aof:

redis 从硬盘读写 redis磁盘_redis_18


这个不就是刚刚操作的命令了吗

append不就是把输入的命令追加到appendonly.aof文件中,后台开启一个线程,每当你输入一个命令就会追加

优点:实时纪律命令,实时持久化
缺点:一个频繁使用的redis,appednonly.aof会非常大,当你启动的适合会读取这个文件,文件很大读取的很慢

如果一个项目允许部分数据丢失,使用rdb
不允许任何数据丢失,使用aof好一点