985研一学习日记 - 2024.10.23

在这里插入图片描述一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。

日常

1、起床6:00

2、健身0h

今天没时间健身,上午在上课,然后坐了一下午加上一晚上的高铁去浙江横店参加CNCC2024,这几天可能都不咋练了,休息几天

3、LeetCode刷了1题

  1. 实现Trie前缀树
    1. 首先要定义一个树结构,且不是二叉树,因为可以有很多个子节点,故应该是多叉树,可以通过在树结构中用一个List < TreeNode >表示当前树下的多个子树,并设置一个标志来表示当前树的节点是不是某个字符的结束
    2. 然后遍历要插入字符串的每个字符,如果没有在根的子树中,则要创建一个TreeNode并赋值当前字符,然后将创建后的TreeNode加入到当前树的子树中,并对最后一个字符设置标识
    3. 当search时,从根节点开始对每个字符进行遍历是否已经插入,如果没有插入则返回false,且对于最后一个字符还要判断是否是结束字符

4、复盘

不复盘等于白学!!!


学习和感想

Redis学习:Redis主从复制(replica)

1. 是什么

  1. 就是主从复制主机以写为主从机以读为主(可以有多个),实现高性能数据库
  2. 当主机数据变化时,自动将新数据异步同步到其他从数据库

2. 能干嘛

  1. 读写分离:主机以写为主,从机以读为主
  2. 容灾恢复:在从机中对主机数据进行备份
  3. 数据备份
  4. 水平扩容支撑高并发:当高并发时,多复制几台从机进行读操作

3. 怎么玩

  1. 配从库不配主库只对从机进行配置,主机不需要配置,但必须能够访问得到主机
  2. 权限细节:如果主机配置了requirepass参数,则需要用密码登录,此时从机必须在其redis.conf中配置masterauth来设置对主机的校验密码
  3. 基本操作命令
    1. replacaof 主机IP 主机Port:对从机进行配置哪台主机的复制,一般直接写入redis.conf配置文件
    2. salveof 主机IP 主机Port:在命令行指定当前从机的主机,可以切换重新连接或者切换主机
    3. slaveof no one使当前数据库停止与其他数据库的同步,即不再做别的数据库的从机

4. 具体实现

  1. 架构说明
    1. 配从不配主,只对从机进行配置,如果主机有密码,则必须要设置masterauth参数
    2. 一主二从
  2. 小口诀
    1. 先确保主从之间相互ping通且注意防火墙配置
    2. 主从复制
      1. 在从机的配置文件中进行配置,主机不需要配置,如果主机设有密码,则从机也必须设置校验
      2. replicaof 主机IP 主机Port
      3. slaveof 主机IP 主机Port
    3. 改换门庭
      1. slaveof 新主机IP 新主机Port
    4. 自立为王
      1. salveof no one
  3. 配置文件
    1. 配从不配主,主机只需要配置必须的,对于主从复制的不需要进行配置,只需要从机进行配置replicaof配置项和masterauth配置项
    2. 文件名最好都配置为加上端口号
  4. 一主二从
    1. 配置文件固定写死
      1. 先master再slave依次启动,启动的客户端端口号必须与配置文件的端口号匹配
      2. 启动redis时先根据指定的配置文件启动服务器:redis-server redis.config再启动redis客户端redis-cli -a password -p port不写-p时默认访问6379,如果配置文件不是6379,则必须指定对应的端口号
      3. 使用 info replication 查看当前客户端的主从信息
      4. 启动成功后此时对主机写入,则从机会自动同步数据
      5. 主机写入,从机读出
    2. 主从问题
      1. 从机只可以读取,不可以写入,只有主机可以写入,且从机会同步更新数据
      2. 从机切入点:从机连接成功会直接复制主机的所有数据然后跟着主机同步更新
      3. 主机SHUTDOWN后,从机不会上位,原地待命仍是slave且连接断开等待主机回来
      4. 主机SHUTDOWN回来后,仍然保持主从关系,从机继续同步更新
      5. 从机SHUTDOWN后再重启会先复制主机所有数据,然后同步更新
    3. 命令操作手动指定
      1. 不在从机的配置文件中配置,而是直接在从机的命令行使用slaveof 主机IP 主机Port进行配置
      2. 从机连接主机后会先复制所有的数据,然后同步更新,只要连接上则会复制所有的数据
      3. 当此时因为没有在配置项中配置,故从机重启后就失去连接,必须再次配置主从关系
      4. 当某个redis的配置项没有配置replicaof时,则默认是主机master
    4. 配置文件持久稳定命令只在当次生效
  5. 薪火相传
    1. 如果一个master连接过多的slave则会因为主从复制而浪费太多资源,故可以使得其的某个slave作为别的slave的master,即其他从机从别的从机中进行复制,但要注意孙子的slave的配置要修改为其所连接的主机相应的配置(IP、Port、MasterAuth)
    2. 但此时作为主机的从机仍不可以写操作只要是从机都不可以进行写操作,就算连着从机也不可以
    3. 一个从机中途改变转向,会清除之前的所有数据,重新拷贝新主机的数据
    4. 使用slaveof 新主机IP 新主机Port 来改变当前从机的主机
  6. 反客为主
    1. 某个redis服务器从slave变为master
    2. 要么修改redis.conf配置文件删除replicaof配置项,要么在客户端通过 slaveof no one 来实现
    3. 此时只要没有连接主机则默认都是master
    4. 通过 info replication 来查看当前客户端的主从信息

5. 复制原理于工作流程

  1. slave启动,同步初请
    1. slave启动成功后连接到master会发送一个sync命令
    2. slave首次连接master,会全量复制master的所有数据,并覆盖slave原有的数据
  2. 首次连接,全量复制
    1. slave首次连接master时,会一次性复制全部数据并覆盖原来的数据
    2. master接收到slave发出的sync命令后,会先保存当前的所有数据和状态为RDB快照文件,并保存AOF文件,然后会将rdb快照和aof的修改命令发送给slave
    3. slave接收到master的数据库文件数据后会根据RDB和AOF重新进行数据加载,会覆盖原有的数据,从而实现初始化全量复制
  3. 心跳持续,保持通信
    1. 在连接成功并初始化后,由master会根据配置的 repl-ping-replica-period(master发送PING包的周期,默认是10s) 来周期的发送心跳包以保持通信
    2. 该配置只是发送心跳包以保持通信,不会发送数据
  4. 进入平稳,增量复制
    1. 在正常连接时,master会将收集到的所有修改命令自动依次传送给每个slave,以完成同步
    2. 只在第一次传送RDB全量文件,此后每次只传送AOF的缓存文件,只把修改命令传送给slave即可
  5. 从机下线,重连续传
    1. master和slave都会保存一个offset(保存在backlog中) 和一个masterId,当slave重连时,master回检查offset,将已经复制的offset之后的数据赋值给slave,类似于断点续传

6. 缺点

  1. 复制延时,信号衰减
    1. 因为只有一条master进行写操作而且会将数据同步到slave中会存在一定的延迟,当slave很多时,延迟很更严重
  2. master挂了怎么办
    1. 主机挂了,从机会失去连接,但不会变为主机,仍然是从机原地待命等待主机恢复
    2. 默认只要主机挂了不会重新选择一个主机,此时需要人工干预
    3. 为了不用每次都要人工干预,故引入了redis Sentinel哨兵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值