Redis是一种高级key-value数据库。它跟memcached类似.和memcached 相比,主要优势:

  1. 数据可以持久化,
  2. 而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。
  3. 支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。

AOF

这两个风险最好的解决方案是折中妙用AOF机制的三种写回策略 appendfsync:

always,同步写回,每个子命令执行完,都立即将日志写回磁盘。

everysec,每个命令执行完,只是先把日志写到AOF内存缓冲区,每隔一秒同步到磁盘。

no:只是先把日志写到AOF内存缓冲区,有操作系统去决定何时写入磁盘。

AOF 持久化的方法使用默认(everysec)的每秒同步一次,Redis 最多也就丢失 1 秒的数据而已。

对于具有相同数据的的Redis,AOF 文件通常会比 RDB 文件体积更大(RDB存的是数据快照)。

Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写:重写后的新 AOF 文件包含了重写这一时刻之前数据集所需的最小命令集合。

当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

重写的流程是这样:

• 主进程会fork一个子进程出来进行AOF重写,并不是对原文件进行重新整理,而是直接读取redis服务内存中现有的键值对,然后用一条命令去代替每个键值对,写入到新的AOF文件中

• 在fork子进程这个过程中,服务端仍然可以对外提供服务,在子进程重写的这个时间段里面,,主进程的数据更新操作,会缓存到aof_rewrite_buf中,也就是单独开辟一块缓存来存储重写期间收到的命令,当子进程重写完以后再把缓存中的数据追加到新的aof文件。

• 当所有的数据全部追加到新的aof文件中后,会把旧的aof文件替换成新的aof文件,此后所有的操作都会被写入新的aof文件。

•如果在rewrite过程中出现故障,不会影响原来aof文件的正常工作,只有当rewrite完成后才会切换文件。因此这个rewrite过程是比较可靠的。