那么, 什么是copy-on-write呢? copy-on-write的原理.

redis有一个主进程, 在写数据, 这时候有一个命令过来了, 说要把数据持久化到磁盘.

img

我们知道redis的worker是单线程的, 如果要持久化这个行为也放在单线程里, 那么如果需要持久化数据特别多, 将会影响用户的使用. 所以单开一个进程专门来做持久化的操作.

那么写数据, 写什么呢? 肯定是要把redis内存中的数据写入. 这时候, 其实redis内存中的数据保存的是一个虚拟地址. 他真实指向的是物理内存的地址(绿色部分)

img

这时候, 要拷贝, 就是把真实数据的地址拷贝一份到需要持久化的进程中

img

其实持久化进程这个时候只是指向了数据的地址, 内存消耗并不多. 如果这时候, 原来的数据修改了, 怎么办呢?

redis会开辟一块新的空间, 让写数据的地址指向新的空间

img

这样就不会影响持久化进程需要持久化的数据了.

这就是copy-on-write机制

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐