为了保证redis命令具备幂等性 , 对redis中部分非幂等性命令进行了改造 , 具体设计改造的命令如下所示:
文章插图
注:list类型命令暂未改造 , 不具备幂等性
3、数据回环处理数据回环主要是指 , 当同步工具从A机房redis读取的数据 , 通过MQ同步到B机房写入后 , B机房的同步工具又获取到 , 再次同步到A机房 , 导致数据循环复制问题 。
对于同步到从节点以及迁移工具的数据 , 会在头部添加id字段 , 针对不同来源的数据或者无需同步到远端的数据通过id来标识区分;本地业务客户端写入的数据需要同步到远端数据中心 , 分配id大于0;来源于其他数据中心的数据分配id小于0;一些仅用于主从心跳交互的命令数据分配id也小于0 。
同步工具解析完数据后 , 过滤掉id小于0的命令 , 只需要向远端写入id大于0的数据 , 即本地业务客户端写入的数据 。来源于其他数据中心的数据均不回写到远端数据中心 。
4、过期与淘汰数据目前过期与淘汰均由各数据中心redis节点分别独立处理 , 由过期与淘汰删除的数据不进行同步;即由过期与淘汰产生的删除命令其id分配为小于0 , 并由同步工具过滤掉 。
(1)同步产生的问题为什么不同步过去?因为在内存中hash表里面保存的数据没有标记数据中心来源 , 过期与淘汰的数据有可能来自于其他数据中心 , 如果来自于其他数据中心的数据被过期或淘汰并且又同步到远端其他数据中心 , 就会出现数据双写冲突的场景 。双写冲突可能会导致数据不一致 。
(2)不同步产生的问题对于过期数据来说 , 不同步删除可能会导致不同数据中心数据显示不一致 , 但是一定会最终一致 , 且不会出现脏读;
对于淘汰数据来说 , 目前的不同步删除的方案 , 假如出现淘汰 , 会导致不同数据中心数据不一致;目前只有通过运维手段 , 比如充足预分配、及时关注内存使用率告警 , 来规避淘汰数据现象发生 。
5、数据迁移在redis集群模式中 , 一般是在发生横向扩容增加集群主节点数时 , 需要进行槽以及数据的迁移 。
redis集群中数据迁移以槽为维度进行迁移 , 将槽中所有数据从源节点迁移到目标节点 , 然后将槽号标记为由新的目标节点负责 , 同时每迁移完一个Key , 会在源节点中进行删除 , 将migrate命令替换为del命令;同时迁移数据是在源节点中给目标节点发送restore命令实现 。
推荐阅读
- 致敬科技工作者|合意的翡翠如何挑选!
- 京东账号注销! 京东帐号怎么注销?
- 白条怎么开通白条?如何开通京东白条
- |宇宙职业选手:蓝星新科技,未来人族的命运!
- 美术馆|科技何以承载艺术?
- 光芒|不帅不能打职业?京东369谈因长相被VG开除,回家呆1年才走出阴霾
- 唐嫣|唐嫣直播仅200观众!脸部浮肿整容过度,网友:都是科技与狠活
- 朝阳区 病例 轨迹?北京东城区疑似病例
- 秋高气爽去露营?这些黑科技装备别错过!
- 头发丝为啥比脚趾甲老得快 鞋带为啥老开?趣科技解谜题