redis运行时将磁盘中的数据加载到内存中,如果运行期间杀死进程,更新的数据就不能保存到磁盘中,这样的损失是很大的,因此数据持久化显得尤为重要。先试试不保存的情况,
重启服务器,再验证
这说明刚才设置的a没有写入到磁盘中
持久化的两种方法
1.RDB快照
分为手动和自动,手动的命令为save和bgsave,save会阻塞当前进程,保存期间不能进行任何响应,bgsave会fork出一个子进程来保存数据,要注意的是,保存的数据是fork时的数据,fork之后的数据还是在内存中,没有持久化,因此如果此时退出进程,还是有部分数据会丢失
运行之后,会在redis的目录下多出一个dump.rdb文件
这个就是当前数据库的一个快照,下次启动后,会自动读取其中的内容,重启服务器再运行
之前设置的a就保存了,这是手动的保存快照,自动保存需打开配置文件进行配置,打开配置文件redis.windows.conf
save 900 1 表示900秒内如果一个1个key的值被改变就做快照,以此类推。满足一个条件就保存
2.AOF
同样打开配置文件
将no改为yes,开启AOF持久化,接下来的每一条写操作都会被记录到appendonly.aof文件中,但是该文件不会立即写入到磁盘,而是写到缓存中,多久从缓存写到磁盘,这个就是我们来配置了
appendfsync always
#收到写命令后就立即写入磁盘,效率最差,效果最好
appendfsync everysec
#每秒写入磁盘一次,效率与效果居中
appendfsync no
#完全依赖操作系统,效率最佳,效果没法保证
系统默认的是everysec
二者比较
1.AOF由于文件大,即使是有rewrite机制,也比RDB大得多,所以启动效率更低
2.AOF的数据安全性更高,最大限度的避免数据丢失,这从他们的保存策略中就可以看出