Redis是一个基于Key-Value的高速缓存系统,类似于memcached,但是支持更复杂的数据结构List、Set、Sorted Set,并且有持久化的功能。支持在服务器端计算集合的并、交和补集等,还支持多种排序功能,也可以被看成是一个数据结构服务器。由于Redis支持持久化的内存数据库,也就是说需要经常将内存中的数据同步到磁盘来保证持久化,以保证不会因为断电等因素丢失数据。同时,它支持两种持久化方式,一种是Snap-shotting(RDB),也是默认方式;另一种是Append-only file(AOF)的方式。如下图所示:
持久化方式RDB方式是将内存中的数据以快照的方式写入二进制文件中,默认的文件名为dump.rdb。可以通过配置自动快照持久化的方式,配置Redis在n秒内如果超过m个key被修改就自动做快照保存。由于快照方式是在一定间隔时间内做一次的,所以一旦Redis出现问题,那么我们的RDB文件中保存的数据并不是全新的,从最后一次RDB文件生成到Redis停机这段时间的数据全部丢失掉了。
AOF方式比RDB方式有更好的持久化机制。由于在使用AOF持久化时,Redis会将每一个收到的写命令都通过write函数追加到文件中,类似于MySQL的binlog。当Redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于OS会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样AOF方式的持久化也还是有可能会丢失部分修改。
网友评论