一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。
日常
1、起床6:00
2、健身0h
今天没时间健身,上午在上课,然后坐了一下午加上一晚上的高铁去浙江横店参加CNCC2024,这几天可能都不咋练了,休息几天
3、LeetCode刷了1题
- 实现Trie前缀树
- 首先要定义一个树结构,且不是二叉树,因为可以有很多个子节点,故应该是多叉树,可以通过在树结构中用一个List < TreeNode >表示当前树下的多个子树,并设置一个标志来表示当前树的节点是不是某个字符的结束
- 然后遍历要插入字符串的每个字符,如果没有在根的子树中,则要创建一个TreeNode并赋值当前字符,然后将创建后的TreeNode加入到当前树的子树中,并对最后一个字符设置标识
- 当search时,从根节点开始对每个字符进行遍历是否已经插入,如果没有插入则返回false,且对于最后一个字符还要判断是否是结束字符
4、复盘
不复盘等于白学!!!
学习和感想
Redis学习:Redis主从复制(replica)
1. 是什么
- 就是主从复制,主机以写为主,从机以读为主(可以有多个),实现高性能数据库
- 当主机数据变化时,自动将新数据异步同步到其他从数据库
2. 能干嘛
- 读写分离:主机以写为主,从机以读为主
- 容灾恢复:在从机中对主机数据进行备份
- 数据备份
- 水平扩容支撑高并发:当高并发时,多复制几台从机进行读操作
3. 怎么玩
- 配从库不配主库:只对从机进行配置,主机不需要配置,但必须能够访问得到主机
- 权限细节:如果主机配置了requirepass参数,则需要用密码登录,此时从机必须在其redis.conf中配置masterauth来设置对主机的校验密码
- 基本操作命令
- replacaof 主机IP 主机Port:对从机进行配置哪台主机的复制,一般直接写入redis.conf配置文件
- salveof 主机IP 主机Port:在命令行指定当前从机的主机,可以切换重新连接或者切换主机
- slaveof no one:使当前数据库停止与其他数据库的同步,即不再做别的数据库的从机
4. 具体实现
- 架构说明
- 配从不配主,只对从机进行配置,如果主机有密码,则必须要设置masterauth参数
- 一主二从
- 小口诀
- 要先确保主从之间相互ping通且注意防火墙配置
- 主从复制
- 在从机的配置文件中进行配置,主机不需要配置,如果主机设有密码,则从机也必须设置校验
- replicaof 主机IP 主机Port
- slaveof 主机IP 主机Port
- 改换门庭
- slaveof 新主机IP 新主机Port
- 自立为王
- salveof no one
- 配置文件
1. 配从不配主,主机只需要配置必须的,对于主从复制的不需要进行配置,只需要从机进行配置replicaof配置项和masterauth配置项
2. 文件名最好都配置为加上端口号 - 一主二从
- 配置文件固定写死
- 先master再slave依次启动,启动的客户端端口号必须与配置文件的端口号匹配
- 启动redis时先根据指定的配置文件启动服务器:redis-server redis.config,再启动redis客户端:redis-cli -a password -p port(不写-p时默认访问6379,如果配置文件不是6379,则必须指定对应的端口号)
- 使用 info replication 查看当前客户端的主从信息
- 启动成功后此时对主机写入,则从机会自动同步数据
- 主机写入,从机读出
- 主从问题
- 从机只可以读取,不可以写入,只有主机可以写入,且从机会同步更新数据
- 从机切入点:从机连接成功会直接复制主机的所有数据,然后跟着主机同步更新
- 主机SHUTDOWN后,从机不会上位,原地待命仍是slave且连接断开等待主机回来
- 主机SHUTDOWN回来后,仍然保持主从关系,从机继续同步更新
- 从机SHUTDOWN后再重启会先复制主机所有数据,然后同步更新
- 命令操作手动指定
- 不在从机的配置文件中配置,而是直接在从机的命令行使用slaveof 主机IP 主机Port进行配置
- 从机连接主机后会先复制所有的数据,然后同步更新,只要连接上则会复制所有的数据
- 当此时因为没有在配置项中配置,故从机重启后就失去连接,必须再次配置主从关系
- 当某个redis的配置项没有配置replicaof时,则默认是主机master
- 配置文件持久稳定,命令只在当次生效
- 配置文件固定写死
- 薪火相传
- 如果一个master连接过多的slave则会因为主从复制而浪费太多资源,故可以使得其的某个slave作为别的slave的master,即其他从机从别的从机中进行复制,但要注意孙子的slave的配置要修改为其所连接的主机相应的配置(IP、Port、MasterAuth)
- 但此时作为主机的从机仍不可以写操作,只要是从机都不可以进行写操作,就算连着从机也不可以
- 一个从机中途改变转向,会清除之前的所有数据,重新拷贝新主机的数据
- 使用slaveof 新主机IP 新主机Port 来改变当前从机的主机
- 反客为主
- 某个redis服务器从slave变为master
- 要么修改redis.conf配置文件删除replicaof配置项,要么在客户端通过 slaveof no one 来实现
- 此时只要没有连接主机则默认都是master
- 通过 info replication 来查看当前客户端的主从信息
5. 复制原理于工作流程
- slave启动,同步初请
- slave启动成功后连接到master会发送一个sync命令
- slave首次连接master,会全量复制master的所有数据,并覆盖slave原有的数据
- 首次连接,全量复制
- slave首次连接master时,会一次性复制全部数据并覆盖原来的数据
- master接收到slave发出的sync命令后,会先保存当前的所有数据和状态为RDB快照文件,并保存AOF文件,然后会将rdb快照和aof的修改命令发送给slave
- slave接收到master的数据库文件数据后,会根据RDB和AOF重新进行数据加载,会覆盖原有的数据,从而实现初始化全量复制
- 心跳持续,保持通信
- 在连接成功并初始化后,由master会根据配置的 repl-ping-replica-period(master发送PING包的周期,默认是10s) 来周期的发送心跳包以保持通信
- 该配置只是发送心跳包以保持通信,不会发送数据
- 进入平稳,增量复制
- 在正常连接时,master会将收集到的所有修改命令自动依次传送给每个slave,以完成同步
- 只在第一次传送RDB全量文件,此后每次只传送AOF的缓存文件,只把修改命令传送给slave即可
- 从机下线,重连续传
- master和slave都会保存一个offset(保存在backlog中) 和一个masterId,当slave重连时,master回检查offset,将已经复制的offset之后的数据赋值给slave,类似于断点续传
6. 缺点
- 复制延时,信号衰减
- 因为只有一条master进行写操作,而且会将数据同步到slave中,会存在一定的延迟,当slave很多时,延迟很更严重
- master挂了怎么办
- 主机挂了,从机会失去连接,但不会变为主机,仍然是从机原地待命等待主机恢复
- 默认只要主机挂了不会重新选择一个主机,此时需要人工干预
- 为了不用每次都要人工干预,故引入了redis Sentinel哨兵
5484

被折叠的 条评论
为什么被折叠?



