-
2020-12-14 19:50:32
JS获取服务器日期,自动切换网页信息
身为班上的卫生委员,你是不是因为每天要提醒同学打扫卫生而感到烦恼?
现在我们就来解决这个麻烦,每天只要发个链接到群里就好了.本项目涉及云空间,有服务器的同学可以自由扩展
在该项目中我所使用的为:
GitHub(yourGitHubname.github.io/) and 云图片储存为:
www.tietuku.com
本项目所涉及知识:
1.Javascript
2.GitHub平台基本使用
3.Git仓库管理
4.图片云储存平台使用
需要一定github管理基础 & HTML基础
1.我们先把云图片储存给解决掉
1.1 准备:
单周日卫生表图片
双周日卫生表图片
大扫除卫生表图片大家可以自由扩展,本人是根据本人环境来开发的
1.2 开始:
1.登录云图片储存空间(推荐一个免费平台:www.tietuku.com)
2.上传图片
3.自己找到如何可以将上传的图片外链的方法
例:http:// domain name / Catalog / your picture.jpg
2. 解决了图片存储问题,现在我们来用 javascript 代码实现功能
我们先需要整理思路:
难点:
1.如何get周数
2.周数判断,然后打印出"明天"的卫生打扫表关键代码:
new Date().getDay();
//将返回现在时间
星期天~星期六:0 1 2 3 4 5 6
参考资料:JavaScript的Date对象window.location.href=" URL ";
//跳转网页
例:window.location.href=" "https://uiuing.com/"
;` 这是我blog的链接 (> v <)大家可以不加
http://
也可以 但建议加http://
orhttps://
my blog 可以直接访问 uiuing.top (>. <)小知识:
http
是协议
(http协议)
https
ishttp
的加密
(https)
应有免费的ssl
体验 (ssl) (ssh)判断语法:
if (条件) //if判断 { 只有当条件为 true 时执行的代码 } else if (...) { 只有当if条件为 true 时执行的代码 } else(...) { 只有当所以 if条件为 falsh 时执行的代码 }
javascript源码
<script> alert("请打扫好卫生!查看明天卫生请点击“确定”"); var date = new Date().getDay(); //get time 并赋值 date++; //意为:显示明天明天的卫生 date++ 可以写成 date = date + 1 ; if(date = 7) { date = 0 ;` ** ` //没有7 只有 0(星期天) } if(date = 2 && 4 && 6) //当time = 周 2,4,6 时 { //双 window.location.href="jpg"; } else if(date = 3 && 5 && 0) //当time = 周 3,5,0 时 { //单 window.location.href="jpg"; } else if(date = 1) //当time = 周 1 时 { window.location.herf="jpg"; } // © 2017 uiuing uiuing.top </script>
大家可以复制粘贴然后进行修改,链接为云图片储存平台所提供给你的你指定的图片外链
大家可复制范例代码用浏览器运行,看看是什么效果哦~3. 最后一步! 使你的成果可以通过外网可以访问!
将你制作的js代码保存为 :
English name.html
将该文件上传到你的GitHub blog 根目录 !
git remote add origin git@github.com:stormzhang/test.git
//连接你的github仓库,也可通过ssh配置,origin为仓库名
git push origin master
//将代码提交到不同仓库中,可以指定分支
git pull origin master
//先将github上的代码pull下来
git push origin master
//上传至该分支
访问:
your github name
.github.io /
Catelog English name.html
(1.手动上传 ,2.使用git命令)如果你的github blog绑定域名那可以: your domain name
/
Catalog English name.html
更多相关内容 -
Oracle最大日期获取方法
2021-05-02 04:29:45Oracle最大日期获取方法在开发应用中如何获取oracle的最大日期呢?本文将提供这样一个获取方法,需要的朋友可以参考下Sql代码复制代码 代码如下:-- Created on 2010/06/08 by NANdeclare-- Local variables hereTYPE...Oracle最大日期获取方法
在开发应用中如何获取oracle的最大日期呢?本文将提供这样一个获取方法,需要的朋友可以参考下
Sql代码
复制代码 代码如下:
-- Created on 2010/06/08 by NAN
declare
-- Local variables here
TYPE t_test IS TABLE OF DATE INDEX BY BINARY_INTEGER;
v_test t_test;
v_date DATE;
BEGIN
-- Test statements here
v_test(1) := '20020202';
v_test(2) := '20090202';
v_test(3) := '20100202';
FOR i IN 1 ..v_test.count LOOP
IF v_date IS NULL THEN
v_date := v_test( 1);
END IF ;
IF v_date < v_test(i) THEN
v_date := v_test(i);
END IF ;
END LOOP;
dbms_output.put_line(v_date);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line( Sqlerrm);
end;
时间: 2012-11-20
毫秒转换为日期 SELECT TO_CHAR(1406538765000 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS CDATE FROM DUAL; 日期转换毫秒 SELECT TO_NUMBER(TO_DATE('2014-07-28 17:12:45', 'YYYY-MM-DD HH24:MI:SS') - TO_DA
加减日.月.年 在Oracle中,date类型可以直接加减天数,而加减月份要用add_months函数. select a.hiredate 雇用日期, a.hiredate + 5 加5天, a.hiredate - 5 减5天, add_months(hiredate, 5) 加5个月, add_months(hiredate, -5) 减5个月, add_months(hiredate, 5 * 12) 加5年, add_months(hiredate, -5 * 12) 减5年 fro
今天闲来没事, 特意从网上整理了一些资料, 以备日后查阅. 一.常用日期数据格式 1. 获取年的最后一位, 两位, 三位, 四位 select to_char(sysdate,'Y') from dual; -- 获取年的最后一位select to_char(sysdate,'YY') from dual; -- 获取年的最后两位select to_char(sysdate,'YYY') from dual; -- 获取年的最后三位select to_char(sysdate,'YYYY') f
复制代码 代码如下: -- Oracle 取上周一到周末的sql -- 这样取的是 在一周内第几天,是以周日为开始的 select to_char(to_date('20130906','yyyymmdd'),'d') from dual; --结果:6 注释:2013.09.06是周五,为本周的第六天 select to_char(sysdate+(2-to_char(sysdate,'d'))-7,'yyyymmdd') from dual;---上周一 select to_char(sys
1.无效的月份问题 最近在往数据库中插入时间时,Oracle报"无效的月份问题",具体SQL如下: 复制代码 代码如下: INSERT INTO TS_COUNT ( ID,CNAME, STARTTIME, ENDTIME,VALUE ) VALUES ( 1, 'John', '01/06/2013', '02/06/2013', 800 ); 报错:ORA-01843:无效的月份.这是由于日期格式不对造成的. 解决办法: 用select sysda
TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,to_char) 复制代码 代码如下: select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串 select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年 select to_char(sys
to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,"转换格式" ) 即把给定的日期按照"转换格式"转换. 转换的格式: 表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位数表示年 表示month的:mm 用2位数字表示月:mon 用简写形式 比如11月或者nov :m
1>以12小时制显示 SQL>select to_char(sysdate,'YYYY-MM-DD HH12:MI:SS AM')from dual; TO_CHAR(SYSDATE,'YYYY-MM-DDHH1 ------------------------------ 2007-06-29 02:50:06 下午 2>以24小时制显示 SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS AM')from dual; TO_C
无论是DATE还是timestamp都可以进行加减操作. 可以对当前日期加年.月.日.时.分.秒,操作不同的时间类型,有三种方法: 1 使用内置函数numtodsinterval增加小时,分钟和秒 2 加一个简单的数来增加天 3 使用内置函数add_months来增加年和月 例: 对当前日期增加一个小时: 复制代码 代码如下: SQL> select sysdate, sysdate+numtodsinterval(1,'hour') from dual ; SYSDATE
本文实例总结了PHP常用日期加减计算方法.分享给大家供大家参考,具体如下: PHP 标准的日期格式 date("Y-m-d H:i:s"); PHP 简单的日期加减计算 <?php date_default_timezone_set('PRC'); //默认时区 echo "今天:",date("Y-m-d",time()),"\n"; echo "今天:",date("Y-m-d"
几乎所有从事程序开发的程序员都遇到时间处理问题,PHP开发也一样,幸运的是PHP提供了很多关于日期时间函数.只要经常使用这些函数,搭配使用,日期时间处理上就熟能生巧了. 今天要讲的这个例子,需求是这样的.得知某个日期时间, 如:2012-04-25 10:10:00 我要在这个日期时间的基础上加上5个月并返回处理后的日期 结果:2012-04-25 10:10:00 加5个月等于 2012-09-25 10:10:00 这个需求看似简单,但还是有点棘手,因为PHP没有直接提供yyyy-mm-dd
ASP 中 DateDiff 函数详解DateDiff 函数 描述 返回两个日期之间的时间间隔. 语法 DateDiff(interval, date1, date2 [,firstdayofweek][, firstweekofyear]]) DateDiff 函数的语法有以下参数: 参数 描述 interval 必选.字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔.有关数值,请参阅"设置"部分. date1, date2 必选.日期表达式.用于计
在实际的处理中,还有一种比较另类的日期加减处理,就是在指定的日期中,加上(或者减去)多个日期部分,比如将2005年3月11日,加上1年3个月11天2小时.对于这种日期的加减处理,DATEADD函数的力量就显得有点不够. 要实现多个日期部分的加减处理,最主要的就是把要加减的日期字符分解,然后根据分解的结果在指定日期的对应日期部分加上相应的值,其难点在于如何分解日期字符,以及判断分解后的日期字符属于哪个日期部分.要顺利地分解出日期字符的话,首先要规定日期加减的日期字符的格式,可以这样定义: y-m-
Java 中DateUtils日期工具类的实例详解 介绍 在java中队日期类型的处理并不方便,通常都需要借助java.text.SimpleDateFormat类来实现日期类型 和字符串类型之间的转换,但是在jdk1.8之后有所改善,jdk1.7以及之前的版本处理日期类型并不方便, 可以借助Joda Time组件来处理,尤其是日期类型的一些数学操作就更是不方便. java代码 /** * * 日期工具类 java对日期的操作一直都很不理想,直到jdk1.8之后才有了本质的改变. * 如果使用的
本文实例讲述了PHP中的自动加载操作实现方法.分享给大家供大家参考,具体如下: what is 自动加载? 或许你已经对自动加载有所了解.简单描述一下:自动加载就是我们在new一个class的时候,不需要手动去写require来导入这个class.php文件,程序自动帮我们加载导入进来.这是php5.1.2(好像是)版本新加入一个功能,他解放了程序员的双手,不需要手动写那么多的require,变得有那么点智能的感觉. 自动加载可以说是现代PHP框架的根基,任何牛逼的框架或者架构都会用到它,它发明
由于opencv读入图片数据类型是uint8类型,直接加减会导致数据溢出现象 (1)用Numpy操作 可以先将图片数据类型转换成int类型进行计算, data=np.array(image,dtype='int') 经过处理后(如:遍历,将大于255的置为255,小于0的置为0) 再将图片还原成uint8类型 data=np.array(image,dtype='uint8') 注意: (1)如果直接相加,那么 当像素值 > 255时,结果为对256取模的结果,例如:(240+66) % 256
添加cookie: def login(req): if req.method=="POST": uf = UserInfoForm(req.POST) if uf.is_valid(): username = uf.cleaned_data["username"] password = uf.cleaned_data["password"] print username,password users = UserInfo.objects.fil
1.矩阵加法使用 a = np.random.random((3,3)) b = np.random.randint(0,9,(3,3)) ad = tf.add(a,b) 2.矩阵乘法注意 # tensorflow 使用矩阵乘法都必须使用相同类型的数据,否则报错. a = np.random.random((5,3)) b = np.random.randint(0,9,(3,6)) c = tf.tensordot(a.astype(np.float),b.astype(np.float),
-
【Redis二三事】Redis的主从复制机制详细解析(图解)
2021-12-29 10:04:52一把LOL的时间让你了解Redis的主从复制机制,Redis超详细主从复制解析,值得收藏!⭐️写在前面
这里是温文艾尔の学习之路
- 👍如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ
- 👋博客主页🎉 温文艾尔の学习小屋
- ⭐️更多文章👨🎓请关注温文艾尔主页📝
- 🍅文章发布日期:2021.12.29
- 👋java学习之路!
- 欢迎各位🔎点赞👍评论收藏⭐️
- 🎄新年快乐朋友们🎄
- 👋Redis学习之路!
- 🔎更多文章(以下redis文章均上CSDN热榜):
- ⭐️一套超详细的Redis学习教程(图片+实操)—第一集
- ⭐️【Redis二三事】一套超详细的Redis学习教程(步骤图片+实操)—第二集
文章目录
- ⭐️1 主从复制
- ⭐️1.1 主从复制简介
- 1.1.1多台服务器连接方案
- ⭐️1.2 主从复制
- ⭐️1.2.1主从复制的作用
- ⭐️1.3 主从复制工作流程
- ⭐️1.3.1 建立连接阶段步骤
- ⭐️1.3.1.1 主从连接的三种方式(slave连接master)
- 下面对这三种方式分别进行操作演示
- 方式一:在slave端发送连接请求
- 方式二:启动slave时直接与master进行连接
- 方式三:设置配置文件
- ⭐️1.3.2 数据同步阶段步骤
- ⭐️1.3.2.1 数据同步阶段master说明
- ⭐️1.3.2.2 数据同步阶段slave说明
- ⭐️1.3.2.3 命令传播阶段步骤
- ⭐️1.3.2.4 服务器运行ID(runid)
- ⭐️1.3.2.5 主服务器的复制偏移量积压缓冲区
- ⭐️1.3.2.6 主从服务器的复制偏移量(offset)
- ⭐️1.3.3 数据同步+命令传播阶段步骤
- ⭐️1.3.3.1 心跳机制
- 14 主从复制工作流程完整图示
⭐️1 主从复制
⭐️1.1 主从复制简介
了解主从复制之前,你的redis是否高可用?
如果我们的redis是单机的就会存在一定的风险
问题1:机器故障
- 现象:
硬盘故障,系统崩溃
- 本质:
数据丢失
,很可能对业务造成灾难性打击
问题2:容量瓶颈
- 现象:
内存不足
,从16G升级到64G,从64G升级到128G,无限升级内存 - 本质:没钱,硬件条件跟不上
- 结论:硬件的发展速度直接决定软件的技术,内存上不去,redis存储的数据量就很低,这样下去就会放弃redis
因此:
为了避免Redis服务器故障造成重大损失,我们准备多台服务器,互相来南通。将数据复制多个副本保存在不同的服 务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现 Redis的高可用,同时实现数据冗余备份
1.1.1多台服务器连接方案
我们让主服务器专门负责写数据,下面的从属计算机专门负责读数据,数据由主服务器提供给从属服务器,这样的话我们的数据有多个备份,也就实现了高可用
提供数据方:master- 我们可以称之为:主服务器,主节点,主库,主客户端
接收数据方:slave
- 我们可以称之为:从节点,从库,从客户端
需要解决的问题
- 数据同步:master的数据复制到slave
这样,我么从主服务器向从服务器复制数据,就是主从复制
⭐️1.2 主从复制
主从复制即:将master中的数据及时,有效的复制到slave中
特征:一个master可以拥有多个slave,一个slave只对应一个master
职责:
- master
写数据
- 执行写操作时,将出现变化的数据
自动同步
到slave
- slave
读数据
可能会有人说:master的压力过大崩溃了怎么办,不要着急,我们后面会说到的的哨兵模式就是为了解决这一问题的 除此之外,当我们的master压力很大时,我们可以在某一个slave上给其追加从属服务器,例如下图,所以说, master和slave是一种相对的概念
⭐️1.2.1主从复制的作用
-
读写分离:
master写
,slave读
。提高服务器的读写负载能力
-
负载均衡:基于
主从结构
,配合读写分离
,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量 -
故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
-
数据冗余:实现
数据热备份
,是持久化之外的一种数据冗余方式 -
高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案
⭐️1.3 主从复制工作流程
主从复制过程大体可以分为3个阶段
1.建立连接阶段(即准备阶段)
2.数据同步阶段
3.命令传播阶段
流程图解:
⭐️1.3.1 建立连接阶段步骤
建立slave到master的连接,使master能够识别slave,并保存slave端口号
步骤1:设置master的地址和端口,保存master信息
步骤2:建立socket连接
步骤3:发送ping命令(定时器任务)
步骤4:身份验证
步骤5:发送slave端口信息
至此,主从连接成功!
最终状态:
slave:
- 保存master的地址与端口
master:
- 保存slave的端口
总体:
- 之间创建了连接的socket
⭐️1.3.1.1 主从连接的三种方式(slave连接master)
方式一:客户端发送命令
- slaveof masterip masterport
方式二:启动服务器参数
- redis-server -slaveof masterip maxterport
方式三:服务器配置(主流方式,建议使用)
- slaveof masterip masterport
主从断开连接
- 客户端发送命令
- slaveof no one
下面对这三种方式分别进行操作演示
我们以6739端口的服务器为master,以6380端口的服务器为slave进行操作
进入6379服务器关掉守护进程配置与日志
6380服务器同样
启动master及slave
方式一:在slave端发送连接请求
我们查看slave的日志信息
发现连接过程中master与slave的信息已经同步
我们测试一下在master中set一个数据并在slave看能不能获取
方式一成功
方式二:启动slave时直接与master进行连接
我们测试一下在master中set一个数据并在slave看能不能获取
方式二成功现在上面这样种方式都不是主流方式,主流的是直接在配置文件中进行设置
方式三:设置配置文件
修改slave的配置文件,添加如箭头所指的配置
添加完毕我们启动slave,并查看信息是否同步
方式三成功
⭐️1.3.2 数据同步阶段步骤
在slave初次连接master后,会复制master中的所有数据到slave,数据同步阶段包括全量复制与部分复制
也就是将slave的数据库状态更新成master当前的数据库状态
步骤1:请求同步数据
步骤2:创建RDB同步数据
步骤3:恢复RDB同步数据(以上阶段为全量复制)
步骤4:请求部分同步数据(同步的是缓冲区中的指令引起的数据)
步骤5:恢复部分同步数据(此过程会执行bgrewriteaof重写操作,恢复数据,步骤4,步骤5阶段为部分复制)
至此数据同步工作完成
全量复制
- 获取发指令的那一刻开始
原来的所有数据
部分复制
- 恢复进行
RDB过程中对应的所有数据
最终状态:
slave:
具有master端全部数据
,包含RDB过程接收的数据
master
- 保存slave当前数据同步的位置
总体
- 之间完成了数据克隆
⭐️1.3.2.1 数据同步阶段master说明
-
如果master数据量巨大,数据同步阶段应
避开流量高峰期
,避免造成master堵塞,影响业务正常执行 -
复制缓冲区大小设置不合理,会导致
数据溢出
,如进行全量复制周期太长,进行部分复制时发现数据已经存在丢失的情况,必须进行第二次全量复制,致使slave陷入死循环状态
我们可以通过配置修改缓冲区的大小
- repl-backlog-size lmb
master单机内存占用主机内存的比例不应过大,建议使用50%-70%的内存,留下30%-50%的内存用于执行bgsave命令 和创建复制缓冲区
⭐️1.3.2.2 数据同步阶段slave说明
- 为避免slave进行全量复制,部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务 - slave-serve-stale-data yes|no(当主服务器挂掉时是否提供过期数据) - 数据同步阶段,master发送给slave信息可以理解master是slave的一个客户端,主动向slave发送命令 - 多个slave同时对master请求数据同步,master发送的RDB文件增多,会对带宽造成巨大冲击,如果master带宽 不足,因此数据同步需要根据业务请求,适量错峰 - slave过多时,建议调整拓扑结构,由一主多从结构变为树状结构,中间的节点是master,也是slave,注意使用 树状结构时,由于层级深度,导致深度越高的slave与最顶层master间数据同步延迟较大,数据一致性变差, 应谨慎选择
⭐️1.3.2.3 命令传播阶段步骤
当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,同步的动作称为命令传播
一句话就是实时保持主从之间的数据同步
命令传播阶段的部分复制
- 命令传播阶段出现了断网情况
- 网络闪断闪连 忽略
- 短时间网络中断 部分复制
- 长时间网络中断 全量复制
- 部分复制的三个核心要素
- 服务器的运行id(run id)
- 主服务器的复制偏移量积压缓冲区
- 主从服务器的复制偏移量
下面我们对这三个核心要素分别进行叙述
⭐️1.3.2.4 服务器运行ID(runid)
概念:服务器运行ID是每一台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id
组成:运行id由40位字符组成,是一个随机的十六进制字符
作用:运行id被用于在服务器间进行传输,识别身份
- 如果想两次操作均对同一台服务器进行,
必须每次操作携带对应的运行id
,用于对方识别
实现方式:
- 运行id在每台服务器启动时
自动生成
的,master在首次连接slave时,会将自己的运行ID发送给slave,slave保存此ID,通过info Server命令
可以查看节点的runid
我们输入info server命令查看服务器运行id
⭐️1.3.2.5 主服务器的复制偏移量积压缓冲区
概念:复制缓冲区,又名复制积压缓冲区,是一个先进先出(FIFO)的队列,用于存储服务器执行过的命令,每次传播命令,master都会将传播的命令记录下来毛病存储在复制缓冲区
复制缓冲区默认数据存储空间大小是
1M
,由于存储空间大小是固定的
,当入队元素的数量大于队列长度时
,最先入队的元素会被弹出,而新元素会被放入队列由来:每台服务器启动时,如果开启有AOF或被连接为master节点,即创建复制缓冲区
作用:用于保存master收到的所有指令(仅影响数据变更的指令,例如set,select)
数据来源:当master收到主用户端的指令时,除了将指令执行,会将该指令存储到缓冲区中
复制缓冲区内部工作原理当master接到一个指令,例如set name itheima,它会把指令拆解开放进复制缓冲区,指令在缓冲区的形式为
为了区分各个字符,每个字符都有自己的编号
所以复制缓冲区由两部分组成- 偏移量
- 字节值
工作原理
- 通过offset区分不同的slave当前数据传播的差异
⭐️1.3.2.6 主从服务器的复制偏移量(offset)
概念:一个数字,描述复制缓冲区中的指令字节位置
分类:
- master复制偏移量:记录发送给所有slave的指令字节对应的位置(多个)
- slave复制偏移量:记录slave接收master发送过来的指令字节对应的位置(一个)
数据来源
- master端:发送一次记录一次
- slave端:接受一次记录一次
作用:同步信息,对比master与slave的差异,当slave断线后,恢复数据使用
⭐️1.3.3 数据同步+命令传播阶段步骤
这部分比较复杂,大家可以看着流程图和我的叙述进行理解
现在是数据同步阶段:
首先进行全量复制
slave向master发送指令,请求数据同步,执行psync2 <runid> <offset>指令,此时slave并不知道master的 runid与offset,故发送的指令形式为psync2 ? -1
master收到来自slave的指令,执行bgsave生成RDB文件,记录当前的复制偏移量offset,接收的offset值为-1
因为接收到offset=-1,故master采用全量同步,将会把所有信息都发送过去,顺带自己的runid与offset,发送的 指令为+FULLRESYNC runid offset
slave收到+FULLRESYNC,保存master的runid和offset,清空当前全部数据,通过socket接收RDB文件,恢复RDB 数据,至此全量复制结束
接下来进行部分复制
期间master接收客户端命令后(这里的期间指全量复制期间),offset发生了变化,全量复制之后slave会发送指令 请求master将剩余的信息进行发送,发送的命令是psync2 runid offset
接下来进入命令传播阶段:
master接收到psync2 指令后,
-
先判断
runid是否匹配(不匹配证明不是一台机器)
,然后判定offset是否在复制缓冲区中,如果runid或offset有一个不满足,就会再次执行全量复制
-
如果runid或offset检验通过
- slave发送的offset与master缓冲区中的offset相同,则忽略,证明全量复制期间没有其他数据进入缓冲区
- slave发送的offset与master缓冲区中的offset不相同,则发送+CONTINUE offset指令,通过socket发送复制缓冲区中slave发送的offset到master本身的offset的数据
slave收到master发送的+COUNTINUE指令,保存master的offset,接收信息后,执行bgrewriteaof对部分复制的指令进行重写,恢复数据,随后因为心跳机制的原因,slave周期性的向master发送请求以汇报自己的offset,获取最新的指令变更
⭐️1.3.3.1 心跳机制
传播阶段master与slave之间的联系是反复进行的,而这种反复进行的机制是由心跳包来控制的
- 进入命令传播阶段,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线
- master心跳
- 指令:PING
- 周期:由repl-ping-slave-period决定,默认10秒
- 作用:判断slave是否在线
- 查询:INFO replication
- 获取slave最后一次连接时间间隔,lag项维持在0或1视为正常
- slave心跳任务
- 指令:REPLCONF ACK[offset]
- 周期:1秒
- 作用1:汇报slave自己的复制偏移量,获取最新的数据变更指令
- 作用2:判断master是否在线
如果lag不为1或者0,证明可能在ping某些时候可能丢过心跳阶段注意事项
- 当slave多数掉线,或延迟过高时,master为保障数据稳定性,将拒绝所有信息同步操作
- min-slaves-to-write 2
- min-slaves-max-lag 8
- slave数量少于2,或者所有slave的延迟都大于等于8秒时,强制关闭master写功能,停止数据同步
- slave数量是由slave发送REPLCONF ACK命令做确认
- slave延迟是由slave发送REPLCONF ACK命令做确认
14 主从复制工作流程完整图示
-
这里是温文艾尔の学习之路
-
👍如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ
-
👋博客主页🎉 温文艾尔の学习小屋
-
⭐️更多文章👨🎓请关注温文艾尔主页📝
-
🍅文章发布日期:2021.12.29
-
👋java学习之路!
-
欢迎各位🔎点赞👍评论收藏⭐️
-
🎄新年快乐朋友们🎄
-
👋Redis学习之路!
-
🔎更多文章(以下redis文章均上CSDN热榜):
-
【自由列表框模块】不懂自绘易友的福音,使用简单-易语言
2021-06-14 01:04:09模块基于复制组件的方式生成列表,源码内已内置添加了按钮、编辑框、标签、超级按钮、超级编辑框、超级列表框、单选框、hk条、画板、进度条、列表框、日期框、透明标签、图片框、图形按钮、外形框、选择列表框、颜色... -
c#自定义日历插件,给重要日期添加色彩。以及系统自带的monthCalendar日历插件
2017-11-09 11:02:41使用系统自带的monthCalendar日历控件,这是一个比较完善的控件,但是它为了提高性能,很多东西不支持通过直接改属性或行为就能完成的,比如我们给特定日期加背景色就不行,因为它是通过发Message给系统来改变的,...我的需求:查看日历时候,给一些特定的日期和小时标注凸显出来
作为一个新手,这个过程有多艰辛不多说了。首先给日期凸显
方法一:使用系统自带的monthCalendar日历控件,这是一个比较完善的控件,但是它为了提高性能,很多东西不支持通过直接改属性或行为就能完成的,比如我们给特定日期加背景色就不行,因为它是通过发Message给系统来改变的,当然网上说可以重写onpaint,我也相信这可以,但是我还不会用,希望会的人能分享一下。monthCalendar虽然不能变颜色但是它有个很关键的属性 BoldedDates( 获取或设置 DateTime 对象的数组,确定要以粗体显示的非周期性日期。),这个属性可以做到给不同月里的不同日期字体加粗,从而达到效果, 如图一;虽然这样能有一点效果,但还不明显,为此我尝试过重写来实现,可以参考下monthCalendar的api https://msdn.microsoft.com/zh-cn/library/system.windows.forms.monthcalendar(v=vs.110).aspx :由于时间问题,通过这种方法我还没调试出来该背景色的。有时间在研究一下。
方法二:通过自定义控件,为此我找到了一个MPK Calendar,这是个自定义的控件,有源码,这个控件也有个属性BoldedDates,同样是加粗,接着还有个属性BoldedDateFontColor这是给加粗日期改颜色的,效果很好, 如图二:
图一图二
-
看不完的那种!前端170面试题+答案学习整理(良心制作)
2021-01-14 23:56:21把你的前端拿捏得死死的,每天学习得爽爽的,关注这个不一样的程序员,如果你所学的东西 处于喜欢 才会有强大的动力支撑。 感谢不负每一份热爱前端的程序员,不论前端技能有多奇葩,欢迎关注加我入群vx:xiaoda0423 ... -
微信小程序之日期计算器
2020-04-01 19:46:29本次我来介绍一下,如何写一个日期计算的小程序。 一、代码前的准备 既然是关于时间的小程序,那么我们首先要用到一些关于JavaScript的Date函数,非常实用。点击这里查阅 为了避免文章太长,过于枯燥,我决定先把... -
java获取文件和照片创建时间
2022-01-17 21:35:04由于要获取照片创建的时间,也就是数字化的时间,即拍摄时间;开始通过网上搜索的获取文件时间都是本机电脑创建此文件的时间,路子不对,不符合要求;后来通过搜索获取照片拍摄时间,才拿到正确的创建时间。 -
二进制数据图片(bit-data-map): 一种通过图片的形式传递数据信息的方式
2021-02-25 12:17:03二进制数据图片 前言 最近公司那台终端电脑的粘贴功能坏了, 连接远程想从里面拿一个文件出来, 试了好多种方法不顶用, 远程终端开了一堆程序也不能随便重启远程终端, 最终是关了一大堆不必要的应用, 又重启了下... -
电脑Excel表格怎么对不连续的单元格进行批量填充
2021-07-23 01:31:59电脑Excel表格怎么对不连续的单元格进行批量填充腾讯视频/爱奇艺/优酷/外卖 充值4折起excel表格是我们现在经常使用的办公软件之一,今天小编跟大家分享的是电脑Excel表格怎么对不连续的单元格进行批量填充。... -
原生JS 左右箭头选择日期
2017-03-13 19:46:32先上个效果图,就是用左右尖括号可改变中间日期的值。(点击中间显示区域有时间选择器弹框,用的插件就不说了,主要说自己原创的部分) HTML部分 (左右箭头都是用的图片素材,网上一大把,这里我就显示我... -
arcgis图像和坐标系统一致但不重合_学习ArcGIS,这62个Arcmap常用操作技巧可能帮到您...
2020-10-30 18:16:34一个打开工程中内容列表区的图层文件全部复制拷贝到另一个打开工程的内容列表中,在源工程内容列表区中选中要复制的图层文件上右键复制,在目标工程内容列表区中图层上右键粘贴图层文件。 26快捷键 ALT+R 键然后 S ... -
Layui布局变化利用style改变布局
2019-06-09 20:36:01作者:李国林 ...即使是html里面进行页面布局,有时候也会有一点错误,因为有一些插件已经是封装好的,因此我们是引用他的样式,然后进行里面的样式进行用,但是有一些样式的位置就会有一些是不符合我们... -
python tkinter 设置窗口大小不可缩放实例
2020-12-08 23:57:31python tkinter 设置窗口大小不可缩放实例解决方法将窗口最大尺寸和最小尺寸设置为一样即可top = Tk() # 创建顶级窗口top.minsize(560, 545) # 最小尺寸top.maxsize(560, 545) # 最大尺寸top.mainloop()补充知识:... -
MySQL基础总结(四)- 建表、插入数据、表的复制、修改数据、删除数据
2020-11-17 17:37:42一、建表 MySQL当中常见的字段数据类型 字段名称 说明 int 整数型(java中的int) ...日期类型 (对应Java中的java.sql.Date类型) ...二进制大对象(存储图片、视频等流媒体信息) Binary La -
Excel百宝箱 9.0 破解版 批量导入图片等200种功能
2013-05-11 22:46:24不需要参数,输入的时间表示现在的时间,但不随时间改变而改变 SFZ身份证相关信息函数。第一参数为引用,第二参数输入“DQ”取返回地区,输入“XB”则返回性别,输入“SR”则返回生日。忽略第二参数则默认显示地区 ... -
PS中改变人物衣服图案
2019-04-01 10:43:09PS中改变人物衣服图案 作者:蒋林松 撰写日期:2019年2月8日 大家好,我今天是来个大家说一说我们在PS中如何改变衣服图案什么的。生活中我们见到了一些好看的东西都会拍照留念,然... -
Jhead (Exif 信息批量命令行编辑工具,win命令行,含源代码)一个直接用命令查看修改删除图片属性Exif信息的...
2016-02-15 08:56:01directory(改变目录)的意思,试着键入---cd要更改的照片文件夹名称。 这时出现\DocumentsandSettings\user\桌面\你要更改的照片文件夹名称。表示已进入你想更改的目录。接着键入jhead参数 据说该工具最早是在linux... -
iview表格导出csv遇到的几个问题以及解决方法(序号、日期)
2019-08-17 21:32:53从图片上可以看出,直接在单元格里面输入日期的话,单元格会自动把输入的日期更换格式,如果输入=“日期”,单元格会按原样输出,长数字也是一样的道理。所以在有些博客上的处理方法就是在exportCsv方法里面的参数... -
Linux cp命令总结
2021-05-09 08:10:29cp命令--文件复制目录和文件的复制命令cp命令语法和参数:cp [OPTION]...SOURCE...DIRECTORY-a ALL 等价于dpR-d复制符号链接源文件时,目标文件也将创建符号链接执行源文件的原始文件-p preserve 保留文件属性,属主... -
01改变世界:机械之美——机械时期的计算设备
2017-02-08 10:51:08机械时期(17世纪初~19世纪末)手动时期的计算工具通常没有多少复杂的制作原理,许多经典的计算工具之所以强大,譬如算盘,是由于依托了强大的使用方法,工具本身并不复杂,甚至用现在的话来讲,是遵从着极简主义的... -
mac技巧:如何改变原生截图的命名?
2020-11-01 17:09:38如何改变原生截图的命名?很多网友反映原生截图后缀内容之长也是没谁了,如何才能更简便美观呢?跟上小编的脚步来了解一下具体操作吧~ 在MacBook上,按下「Shift+Command+5」键就可以打开「截屏工具」,用户能手动... -
前端面试(真题重现,确定不进来看看?)
2020-08-04 22:44:005:光标手形:cursor:hand 在safari 上不支持 IE才支持 解决方案:统一使用 cursor:pointer 6:解决在 IE6 下,列表与日期错位的问题 日期 标签放在标题 标签之前即可 7:IE6-7 line-height 失效的问题 问题:在ie ... -
github上传文件时,目录、文件的创建、复制、删除和移动等操作
2016-07-23 10:05:05功能说明:改变文件或目录时间。 语 法:touch [-acfm][-d ][-r ][-t ] [--help] [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时 间][文件或目录...] 补充说明:使用touch指令可更改... -
vika维格表和飞书,多维表格如何改变我们的工作方式?
2020-12-14 19:00:45目前,vika 维格表提供了多达十余种字段类型可供选择,如文本、电话、邮箱、日期、数字等等,还可以通过附件的字段类型,批量上传图片、视频、音频、文档等,每种类型都可以根据你的个性化需求任意自定义使用。... -
想查看微信好友撤回的消息?Python帮你搞定
2019-12-01 13:50:59比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于是你打算问问她发了什么,结果她回一句"没什么"。这... -
QTableView 添加进度条、下拉选择框、日历、图片、文字等(QAbstractItemDelegate)
2021-01-17 18:36:00本文主要记录QTableView 使用代理添加进度条、下拉选择框、日历等,并实现复制粘贴,右键菜单等,效果如下图所示,最后有动态展示。 图片说明 1:图中红色1处是√和×,双击可以相互切换显示 2:图中红色2... -
Photoshop数码照片处理从入门到精通(中文PDF)
2010-06-29 14:37:07Lesson 14 去除照片上的日期 Lesson 15 对混乱的背景进行处理,使照片中的人物更加突出 Lesson 16 删除照片中不需要的部分 知识点 修复画笔工具(Healing Brush Tool) 知识点 修补工具(Patch Tool) Lesson 17 清除... -
一招教你利用画图工具修改图片上的文字
2021-07-24 02:00:15一招教你利用画图工具修改图片上的文字腾讯视频/爱奇艺/优酷/外卖 充值4折起相信很多小伙伴在日常办公中都会用到画图工具,如果我们想要利用该工具修改图片上的文字该怎么做呢?方法很简单,下面小编就来为大家介绍... -
超硬核!兔兔阿里p7学长给的面试知识库
2021-05-26 22:14:07MongoBD数据模型 MongoBD数据类型: 基本数据类型: Null 表示空值或者不存在的字段②布尔③数值类型④字符串⑤二进制数据可以保存由任意字节组成的字符串,例如:图片、视频等⑥正则表达式:{name:/foo/} name字段...