国外英文版云购夺宝网站项目开发制作代码解析

前言

这是目前国外比较火的国外英文版云购夺宝网站项目开发代码解析项目,是从在国内版上面进行二次开发的,里面有很多算法功能可以让大家参考和学习,是非常不错的一个项目,国内的拼多多差不多也是参考这个来做修改而来的,所有希望大家能够喜欢,先上几张图片先。

正文


 


这个是中英版切换的



第一章先介绍一下,里面的一个Redis功能,我是借助服务器来实现的,现在给大家介绍一下

实现主从复制

每一台Redis服务器启动时,默认都是主服务器(Master),可以通过命令info replication查看,如下图所示:

image-20201217153936026

开始实操搭建一主二从的环境,如下:

image-20201218123349514

1. 配置文件修改

由于是在同一台机器上模拟,所以将redis配置文件拷贝三份出来,主要修改项如下:

  • 配置文件名称:分别为redis.conf、redis6388.conf、redis6399.conf;

  • port:端口,三个配置文件分别修改为6379、6388、6399,这是为了避免同一台机器演示端口冲突;

  • pidfile:修改此文件名,避免文件冲突,改文件名即可,分别修改为redis.pid、redis6388.pid、redis6399.pid;

  • dbfilename:持久化文件名,避免持久化文件冲突,分别修改为dump.rdb、dump6388.rdb、dump6399.rdb;

2. 启动redis服务器

然后分别指定配置文件启动redis-server,在redis中bin目录下执行./redis-server redis.conf、./redis-server redis6388.conf、./redis-server redis6399.conf命令即可,可以通过命令ps -ef | grep redis查看启动redis效果,如下:

image-20201217161153175

3.1 使用命令实现主从关系

默认情况下,启动的三台服务器默认都是主服务器,现在可以通过简单的命令实现一主二从的关系,这里以6379这台服务器为主,6388和6399两台服务器为从,配置主从关系只针对从节点服务器配置即可,如下:

  1. 分别连上6388和6399两台服务器,执行slaveof masterip masterport即可:

    image-20201217170814190

  2. 从节点显示没问题,看看主节点状态信息,连上6379这台看看,如下:

    image-20201217171428807

  3. 主从关系维护好了,接下来看看数据复制,通常主节点负责写,将数据同步到从节点,从节点负责读; 现在三台服务器都没数据,接下来往主节点中写入点数据,看看是否能同步到从节点:

    image-20201217172631976

注:如果通过命令方式实现主从关系,那当从服务器重启时,主从关系就丢了,还得手动再执行命令,所以推荐配置文件的形式进行配置;

3.2 通过配置文件实现主从配置

还是很简单的,主服务器不用动,仅修改从服务器配置文件,然后重启即可,根据前面章节的学习经验,打开配置文件,直接找到REPLICATION模块进行如下配置修改:

  • replicaof <masterip> <masterport> :指定主节点ip和端口即可,如:replicaof 127.0.0.1 6379;

  • masterauth <master-password>:指定主节点密码,如果主节点配置密码,直接通过这配置就行;

修改完这两项,重启服务器即可,和命令行一样简单,只是通过配置文件搭建的主从关系不会因为关闭服务器而丢失;这里配置文件的演示就不截图了,只是实现方式不一样,其他都是和命令行一致;

小总结

  • 配从不配主,即只针对从服务器配置即可,主服务器无需配置;

  • 一个主节点有多个从节点,从节点只能有一个主节点;从节点也可以作为其他从节点的主节点,如下:

    image-20201218123546841

    这种方式的演示截图就不提供了,小伙伴实操一把,这里说明一下,虽然6388是6399的主节点,但扮演的角色还是6379的从节点,只是它下面连接了其他从节点而已;

  • 如果用命令方式实现主从,主服务器断开后,重新连接,主从关系还在;从服务器断开之后重连关系消失,需要手动执行命令重新指定主节点;

  • 如果希望断开重连主从关系还在,推荐配置文件方式实现;

实现主从复制的搭建是不是很简单,不管是命令还是配置文件的方式,都很轻松实现;但小伙伴是不是也有疑问: 主从节点之间的数据是如何同步的?关于主从复制的其他参数有什么用?

主从复制原理

通过上面实操,在主服务器中写入的数据,在无感知的情况下就同步到各个从服务器,中间到底经历了什么呢? 接下来简单的了解一下;

在Redis2.8之前同步方式都以全量方式同步,之后为了提高效率,数据复制方式分为两种,一种为全量复制,一种为部分复制:

  • 全量复制:即将主服务器中的数据,全部同步到从服务器;一般是在从服务器启动初始化数据的时候进行全量同步;

  • 部分复制:即将未同步的增量数据,同步到从服务器,无需全部再同步一遍;一般用于因网络中断等无法同步数据的情况,待恢复正常之后,将中断期间数据进行部分同步;

为了方便查看日志分析,使用两台redis服务器进行搭建主从, 将之前搭建的关系去除,通过修改配置文件重启即可;

这里以6388作为主节点(Master),6399作为从节点(Slave),当连接6399执行命令slaveof 127.0.0.1 6388配置主从关系时,主从节点分别打印日志如下:

image-20201218150346658

上图是刚开始建立主从关系时,进行了全量复制,大概流程如下:

image-20201218233435825

简要说明:

  1. 从节点与主节点建立连接,然后发送同步请求psync;

  2. 主节点给从节点发送信息,replid和offset,这两个参数后续是判断是否部分复制的关键数据;

  3. 主节点fork子进程将全部数据生成RDB文件;

  4. 主节点期间接收到的写命令存入到复制缓冲区中;

  5. 当主节点RDB文件完成之后发送给从节点;

  6. 从节点接收到文件,先清空老数据;

  7. 从节点清空数据后,加载接收到的数据到内存中;

  8. 主节点发送复制缓冲区中的数据到从节点;

  9. 从节点接收到命令并执行,最终同步到最新数据;

主从关系是通过网络进行通讯,可能出现网络中断或网络抖动情况,导致短时间的数据不能及时同步到从节点上,理想情况下,当连接恢复的时候,希望只同步中断期间的数据,从而提高同步效率,流程大概如下:

image-20201218233509086

简要说明:

  1. 当主从之间由于网络中断时,从节点会尝试重连主节点;

  2. 在此期间,主节点接收到的写命令会记录到复制缓冲区中;

  3. 当网络恢复,从节点连上主节点,会请求发布同步请求psync,并带上之前主节点发送过来的replid和offset;

  4. 主节点接收到从节点的请求,会验证接收的replid与主节点replid是否匹配,不匹配会进行全量复制;还会验证offset数据偏移量是否在合法范围内,如果中断期间数据量过大,导致复制缓冲区的数据超出,主从节点的offset数据偏移量不一致,也会进行全复制;

  5. 当从节点传递过来的replid和offset验证通过时,则进行部分复制,并记录最新的offset;

总结

主从复制演练看似简单,但还需要不断在实践中获取经验,搭配相关配置参数,从而使得更加适合应用场景;配置没有固定都一样,而是应用场景是否适合。随着主节点宕机不能自动选举的问题,下次在此基础上说说哨兵模式,让自动选举不是问题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值