zmalloc_allocations[16]代表已经分配的长度为16bytes的内存块的个数 。zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小 。所以,总的来看,Redis采用的是包装的mallc/free,相较于Memcached的内存管理方法来说,要简单很多 。3、数据持久化支持Redis虽然是基于内存的存储系统,但是它本身是支持内存数据的持久化的,而且提供两种主要的持久化策略:RDB快照和AOF日志 。
而memcached是不支持数据持久化操作的 。1)RDB快照Redis支持将当前数据的快照存成一个数据文件的持久化机制,即RDB快照 。但是一个持续写入的数据库如何生成快照呢?Redis借助了fork命令的copy on write机制 。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件 。
我们可以通过Redis的save指令来配置RDB快照生成的时机,比如配置10分钟就生成快照,也可以配置有1000次写入就生成快照,也可以多个规则一起实施 。这些规则的定义就在Redis的配置文件中,你也可以通过Redis的CONFIG SET命令在Redis运行时设置规则,不需要重启Redis 。Redis的RDB文件不会坏掉,因为其写操作是在一个新进程中进行的,当生成一个新的RDB文件时,Redis生成的子进程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件,这样在任何时候出现故障,Redis的RDB文件都总是可用的 。
同时,Redis的RDB文件也是Redis主从同步内部实现中的一环 。RDB有他的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了 。在某些业务下,这是可以忍受的 。2)AOF日志AOF日志的全称是append only file,它是一个追加写入的日志文件 。
与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令 。只有那些会导致数据发生修改的命令才会追加到AOF文件 。每一条修改数据的命令都生成一条日志,AOF文件会越来越大,所以Redis又提供了一个功能,叫做AOF rewrite 。其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只会有一次,而不像一份老文件那样,可能记录了对同一个值的多次操作 。
其生成过程和RDB类似,也是fork一个进程,直接遍历数据,写入新的AOF临时文件 。在写入新文件的过程中,所有的写操作日志还是会写到原来老的AOF文件中,同时还会记录在内存缓冲区中 。当重完操作完成后,会将所有缓冲区中的日志一次性写入到临时文件中 。然后调用原子性的rename命令用新的AOF文件取代老的AOF文件 。
AOF是一个写文件操作,其目的是将操作日志写到磁盘上,所以它也同样会遇到我们上面说的写操作的流程 。在Redis中对AOF调用write写入后,通过appendfsync选项来控制调用fsync将其写到磁盘上的时间,下面appendfsync的三个设置项,安全强度逐渐变强 。appendfsync no 当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了 。
对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上 。appendfsync everysec 当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘 。但是当这一次的fsync调用时长超过1秒时 。Redis会采取延迟fsync的策略,再等一秒钟 。
也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行 。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞 。所以结论就是,在绝大多数情况下,Redis会每隔一秒进行一次fsync 。在最坏的情况下,两秒钟会进行一次fsync操作 。这一操作在大多数数据库系统中被称为group commit,就是组合多次写操作的数据,一次性将日志写到磁盘 。
推荐阅读
- 买投影仪什么牌子好,无线投影仪什么牌子好
- 魅族手环有几个版本,299元魅族手环正式发布
- 三星s8怎么区别版本,两版本三星S9选谁
- noter4 哪个版本手机好,国行红米Note5将至
- 买固态硬盘和普通硬盘哪个好上1688 金泰克和西数固态硬盘哪个好
- 单反相机佳能和尼康哪个好,佳能和尼康单反相机哪个好
- 哪个牌子的移动电源比较好,41040102
- 16s和17哪个好】魅族17 魅族16s和魅族17参数对比
- 小平板电脑哪个好用,平板小电脑官网
- oppo手机怎么远程定位另一个手机 手机怎么定位对方的手机所在位置