回到顶部

Redis在.net中的使用(5)Redis持久化

时间:3年前   作者:庞顺龙   浏览:368   [站内原创,转载请注明出处]

标签: Redis  

Redis在.net中的使用(5)Redis持久化

Redis跟Memcached都是内存数据库,不过Redis也支持数据持久化,也就是说Redis可以将内存中的数据同步到磁盘来实现数据的持久化,以此来确保Redis的数据安全和准确。

1、Redis持久化的两种方式

①、RDB(Redis DataBase),将存储的数据快照的方式存储到磁盘上。

②、AOF(Append Only File),将Redis执行过的所有数据写指令记录下来,通过write函数追加到AOF文件的末尾,当下次redis重新启动的时候,我们只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。 

其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高,如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,Redis将变成一个纯内存数据库,就像Memcache一样。

2、RDB

RDB(Redis DataBase),是将Redis某一时刻的数据持久化到磁盘中,是一种快照式的持久化方法,默认的文件名为dump.rdb。Redis在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件,以确保数据完整可用。


save 300 10  #300秒内容如超过10个key被修改,则发起快照保存


不过,由于快照方式是在一定间隔时间做一次的,如果对数据的完整性非常敏感,那么RDB方式就不太适合你,因为即使你每2分钟都持久化一次,当redis故障时,仍然会有近2分钟的数据丢失。所以,redis还提供了另一种持久化方式,那就是AOF。

3、AOF

AOF(Append Only File),即只允许追加不允许改写的文件,Redis会将收到的每一个写操作(如SET等)通过write函数追加到AOF文件的末尾。默认的AOF持久化策略是每秒钟fsync一次(把缓存中的写指令记录到磁盘中)。

当Redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。


appendonly yes           #启用aof持久化方式
# appendfsync always    #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec     #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no       #完全依赖os,性能最好,持久化没保证


但AOF方式是将所有的命令记录下来,所以AOF文件要比RDB文件的体积大。而且,恢复速度也要慢于RDB方式。Redis提供了bgrewriteaof命令,会重新生成一个全新的AOF文件,其中便包括了可以恢复现有数据的最少的命令集。需要注意到是重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。

4、如何选择RDB和AOF

对于我们应该选择RDB还是AOF,取决于具体的应用场景,官方的建议是两个同时使用。这样可以提供更可靠的持久化方案。

内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。

评论努力加载中...
暂无评论
暂无评论

手机扫码阅读

热门相关

加载中...
关于我们   联系我们   申请友链   赞助记录   站点地图
© 2014 - 2017 www.80iter.com All Rights Reserved. 京ICP备14042174号-1
本站遵循 CC BY 4.0 协议,转载请注明出处 。