在我的理解里,redis集群和数据库分库差不多——自动地将key分配到16384个槽(slot),而集群中的每个redis节点存储一部分槽。
... ➦redis提供aof和rdb两种持久化机制,本文分析一下这两种持久化机制
以下先摘录一下redis文档关于rdb、aof持久化的优势和劣势
... ➦到目前为止写了挺多网络编程的东西,要么用netty,要么用go。因为网络编程是IO密集的应用,用带gc的语言写,总是因为频繁的gc需求导致cpu占用过高。netty使用unsafepointer的使用堆外内存来避免频繁gc,但是这还是不够,因为你总得生成string这种堆内对象。只有一个办法来避免这种问题,那就是用没有gc的语言来编写网络编程了。
libuv就是c语言的一个异步事件库,这篇博客就是来搞一下。
... ➦今天的正题是想转发一篇关于“异步拷贝”发展的博文,写的真的好,忍不住想转发。看完不禁感叹redis的牛逼,有种兴叹汪洋的感觉。。
... ➦对redis比较了解的人应该知道redis提供rdb持久化机制。rdb文件其实就是redis在某一时间的一个快照,redis在重启时,可以加载这个快照,从而恢复状态。然而redis没有暴露加载rdb这个接口,因此没有办法在运行时手动地导入rdb快照。
其实,在阅读replicate.c后发现,redis的从节点在接收了rdb全量同步文件后,直接调用了rdbload
函数——这就意味着:运行时动态加载rdb文件完全可行!毕竟redis自己也是这么做的。但是redis不肯暴露这个接口给用户。
我们上一篇文章要进行redis异地数据中心同步,同样需要加载rdb文件,如果只能重启redis来加载rdb文件,多少有点不舒服。因此探讨一下redis动态加载rdb文件的实现总归有好处的,事实证明我做到了。
... ➦为实现redis异地数据中心实时同步功能,存在几种方案。其中一种方案是利用redis主从节点的异步拷贝,伪装一个slave节点,获取主节点的异步拷贝信息。将该异步拷贝信息同步到异地数据中心,从而实现redis集群异地同步。
本文的目的就是探究“伪装slave获取异步拷贝”的可行性与复杂度。
虽然redis文档有介绍主从以及异步拷贝,但是其实现并没有详细介绍,因此我阅读了redis中的cluster.c
、replicate.c
(redis版本为4.0.1),探查redis"主从拷贝"实现的细节,并使用netcat软件进行了一些实验。我们的最终结论是:实验结果反映“伪装slave获取异步拷贝”方案是可行的,并且复杂度可接受。
本文记录了redis集群扩容时会发生的slot迁移过程,同时记录了在迁移过程中查询key集群会如何响应。在文章开头,附带了一些redis集群技术的简单介绍(大部分摘自redis官方文档),帮助了解迁移过程。
... ➦