上次已经为大家介绍过java单线程redis为什么快的有关内容了,相信大家对于java Redis已经有了一个初步的了解了。今天来说的也是与之相关的内容,也就是持久化机制。一起来了解一下吧。
首先我们需要了解的是,Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。
实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放。
1.RDB是Redis默认的持久化方式。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制文件。即Snapshot快照存储,对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。( 快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。)
2.AOF:Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当Redis重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。
然后说一下,Redis的内部结构
1.dict本质上是为了解决算法中的查找问题(Searching)是一个用于维护key和value映射关系的数据结构,与很多语言中的Map或dictionary类似。本质上是为了解决算法中的查找问题(Searching)。
2.sds sds就等同于char *它可以存储任意二进制数据,不能像C语言字符串那样以字符’\0’来标识字符串的结 束,因此它必然有个长度字段。
3.skiplist(跳跃表)跳表是一种实现起来很简单,单层多指针的链表,它查找效率很高,堪比优化过的二叉平衡树,且比平衡树的实现,
4.quicklist
5.ziplist压缩表ziplist是一个编码后的列表,是由一系列特殊编码的连续内存块组成的顺序型数据结构。
关于java中redis的内容还是很丰富的,这也就需要大家平时在学习的时候多积累一些相关的知识了。如果你对java知识感兴趣,想要了解更多java常见问题,敬请关注奇Q工具网。
推荐阅读: