Java Study!! - 哨兵
type: channel
link: https://www.kaijavademo.top/tag/%E5%93%A8%E5%85%B5/
items: Redis笔记：管道|发布订阅|复制|哨兵|集群|SpringBoot集成Redis

Redis笔记：管道|发布订阅|复制|哨兵|集群|SpringBoot集成Redis
type: item
date: 2023-09-20T07:02:00+00:00
description: 基于Redis7的学习笔记，包含有Redis管道，目前仍在持续更新。Redis管道Redis管道和Redis事务截然不同的两个东西。可以类比为Java和JavaScript之间的关系。把所有命令排成一行，像流水线一样去处理。管道(pipeline)可以一次性发送多条命令给服务端，服务端依次处理完完毕后， [label color="red"]通过一条响应一次性将结果返回，通过减少客户端与redis的通信次数来实现降低往返延时时间[/label] 。pipeline实现的原理是队列，先进先出特性就保证数据的顺序性。我们之前学过的批量添加无法一次性添加多种数据类型，这个也是我们出现的问题，用管道来解决。我们可以将一次性添加的命令放在myredis/下的一个新的txt文件。在服务器外部执行语句 cat cmd.txt | redis-cli -a abc123 --pipe服务器内部可以使用，如图。[note type="primary flat"]管道小总结：Ⅰ.Pipeline与原生批量命令对比①原生的批量命令是原子性，pipeline是非原子性。②pipeline支持批量执行不同的命令。③原生批命令是服务器实现，而pipeline需要服务端与客户端共同完成。Ⅱ.Pipeline与事务对比①事务具有原子性，管道不具有原子性②事务一条一发，只有在接收到exec命令后才会执行。而管道是一次性将多条命令发送到服务器。③执行事务会阻塞其他命令执行，而执行管道中的命令不会。Ⅲ.管道自身注意事项①管道的缓冲指令只是会依次执行，不保证原子性，如果执行中指令发生异常，将会继续执行后续的指令②使用pipeline组装的命令个数不能太多，不然数据量大客户端阻塞的时间可能过久，同时服务端此时也被迫回复一个队列答复，占用很多内存。[/note]官方解释So if you need to send a lot of commands with pipelining, it is better to send them as batches each containing a reasonable number, for instance 10k commands, read the replies, and then send another 10k commands again, and so forth.发布订阅类似于MQ消息中间件，了解即可，我们还是需要将专业的事情交给专业的人去干。pub|sub作为第一代消息中间件，stream作为第二代消息中间件(就是说可以理解为MQ的前身雏形)是一种消息通信模式，发送者发送消息，订阅者接收消息，可以实现进程见的消息传递。Redis可以实现消息中间件的功能，即通过发布订阅实现消息的引导和分流。专业的事情交给专业的中间件处理，redis做好分布式缓存的功能就够了。开启三个客户端，演示客户端A、B订阅消息，客户端C发布消息演示批量订阅和发布取消订阅[note type="warning flat"]存在的问题(缺点)：①没有持久化，必须先订阅再发布。如果先发布消息没有订阅者，消息直接丢弃。②没有ACK机制，无法保证消息的消费成功③以上缺点导致该模式在生产结构中无用武之地，因此Redis5.0新增了Stream。[/note]Redis复制Redis复制非常重要，生产工作中，redis不可能是单机，后面的哨兵和集群都要建立在这个基础之上。主机(master)以写为主，从机(slave)以读为主。当主机(master)数据发生变化的时候，自动将新的数据异步同步到其他slave数据库。能干嘛？读写分离容灾恢复，对之前持久化的一种更好的补充数据备份水平扩容支撑高并发使用：配从库不配主库。主机配置了requirepass参数，需要密码登录；从机要配置masterauth来设置校验密码，否则主机就会拒绝主机的访问请求。基本操作命令[note type="info flat"]主从复制:replicaof 主库IP 主库端口;配从库不配主库改换门庭:slave of 新主库IP 新主库端口自立为王:slaveof no one[/note]案例需要使用三个虚拟机来模拟这个操作，配置，我用视频的形式来解释我只使用一个虚拟机来模拟三个不同的虚拟机的场景。实际上就是开三个进程，使用不同的配置文件，配置文件中配置好对应的信息和端口号什么的就可以。[video title="主从复制配置准备 " url="https://img.kaijavademo.top/typecho/uploads/2023/09/videos/%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E5%87%86%E5%A4%87.mkv …