Skip to Content

Redis 的持久化学习教程

这里给大家介绍两种Redis 技术http://www.maiziedu.com/course/337/持久化的方法,希望对大家的学习和工作有帮助。

rdb方式
rdb是redis对数据进行持久化而保存到硬盘的数据文件。
默认情况下相关配置如下:
save 900 1
save 300 10
save 60 10000
其意义为:

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


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


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

换句话说,当你重启服务器时数据是可能会丢失的,如果数据量小的时候,你会丢失5分钟以内的数据;如果数据量大的时候,你会丢失一分钟以内的数据。
所以set name 1后重启服务器,get name时的结果会是nil,如果你想避免这种情况发生,那么可以sav后重启服务器。
然而大多数情况下我们需要防止的是服务器突发情况下的重启,这时候可能没有机会save,所以还是会造成数据的丢失。所以你可以设置save "",这样的话会每次写操作到保存到硬盘,但是redis作为缓存却需要每次到保存到硬盘已丧失了其作为缓存的意义。因此这种方法是不可取的。
还有一种方式,在每次写操作时使用bgsave命令,可以直接返回操作结果并异步将其保存到硬盘。
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方式无疑会是更好的选择。


原文来自:segmentfault

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.