Redis 的持久化

rdb方式

rdb是redis对数据进行持久化而保存到硬盘的数据文件。redis

默认状况下相关配置以下:缓存

save 900 1
save 300 10
save 60 10000

其意义为:安全

  • 当1个key更新值时每900秒保存一次数据到硬盘服务器

  • 当10个key更新值时每300秒保存一次到硬盘app

  • 当10000个key更新值时每60秒保存一次到硬盘异步

换句话说,当你重启服务器时数据是可能会丢失的,若是数据量小的时候,你会丢失5分钟之内的数据;若是数据量大的时候,你会丢失一分钟之内的数据。操作系统

因此set name 1后重启服务器,get name时的结果会是nil,若是你想避免这种状况发生,那么能够save后重启服务器。日志

然而大多数状况下咱们须要防止的是服务器突发状况下的重启,这时候可能没有机会save,因此仍是会形成数据的丢失。因此你能够设置save "",这样的话会每次写操做到保存到硬盘,可是redis做为缓存却须要每次到保存到硬盘已丧失了其做为缓存的意义。所以这种方法是不可取的。code

还有一种方式,在每次写操做时使用bgsave命令,能够直接返回操做结果并异步将其保存到硬盘。get

rdb方式的优势是保存的数据存储量小(只有数据),重启速度很快;缺点是可能会形成数据的丢失。

aof方式

aof本质是redis操做(写操做)日志文件。aof默认是未开启的,须要在配置文件中进行设置,在配置文件中将这一行改成appendonly yes就能够了。

那么会在何时append到文件末尾呢?有三种方式:

appendfsync always
appendfsync everysec
appendfsync no
  • appendfsync always每次有新命令追加到 AOF 文件时就执行一次 fsync :很是慢,也很是安全

  • appendfsync everysec每秒 fsync 一次:足够快(和使用 RDB 持久化差很少),而且在故障时只会丢失 1 秒钟的数据。

  • appendfsync no从不 fsync :将数据交给操做系统来处理。更快,也更不安全的选择。

推荐(而且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略能够兼顾速度和安全性。

aof可以保证数据的安全,可是在重启时比较耗时,并且aof文件的体积比rdb文件大。

使用

在同时开启rdb和aof模式时,会采用aof模式来读取数据。在正常的使用中,若是不是十分在意短期内的数据丢失的时候,使用rdb方式会使服务器的效率更高,更节省cpu和硬盘;若是担忧数据丢失的话,aof方式无疑会是更好的选择。

相关文章
相关标签/搜索