缓存穿透。key不存在。恶意攻击、代码问题。加布隆过滤器,或者为空就返回。
缓存失效(击穿)。key刚好过期。缓存时间随机数。
缓存雪崩。缓存层宕机,一下子袭击数据库。缓存高可用、限流熔断、提前演练。
布隆过滤器就是一个key通过多个hash计算到多个数组所在位置,每个位置设为1,如果来了一个key,通过多个hash计算,如果所有位置都为1,过关,但只要有一个位置不为1,不过关。
nx的意思是,如果不存Key,则set,否则返回false。常有用于锁,资源只能被一次只能被一个客户端使用
redis.set(Key, "1", "ex 180", "nx"))
HyperLogLog,高并发用,愿意牺牲一些正确性,但存储空间小。用于原理是最大似然估计。用于记录uv(一天有多少人访问过这个网站,去重)。pfadd、pfcount、pfmerge
事务。watch乐观锁、multi开始事务、exec结束事务、discard丢弃缓存队列中命令(类似回滚,但不回滚
复制缓冲区(OutputBuffer)有多份,有多少个从节点就有多少份在主节点上。用于主节点rbd给从节点时增量的数据存储,rbd后,再把复制缓冲区内容发送过去。复制积压区(ReplicationBacklog),是只有一份,记录主节点给从节点发送的增量写命令,从节点需要增量同步的时候,通过偏移量来复制积压去获取。
复制缓冲区(OutputBuffer)
定义与作用:
- 复制缓冲区是Redis为客户端(在复制场景下,主要是从节点)分配的缓冲区。每个从节点都会有一个对应的复制缓冲区,用于存放全量复制过程中主节点开始执行bgsave到从节点载入rdb文件这个时间段中主节点的写命令。
- 这些命令在从节点载入rdb文件后,会被用来执行增量同步,以确保从节点的数据与主节点保持一致。
大小限制与保护机制:
- 复制缓冲区的大小可以通过配置
client-output-buffer-limit
来控制,对于从节点(slave)来说,默认的大小限制是256MB,如果连续60秒缓冲区大小超过64MB,则主节点会断开与该从节点的连接。 - 这些限制是为了防止因为单个从节点的问题导致主节点消耗过多内存,从而影响整个Redis集群的稳定性。
注意事项:
- 如果主节点的数据量过大或者网络延迟过高,可能会导致复制缓冲区溢出,进而引发主从连接中断。
- 在设计和部署Redis集群时,需要根据实际情况调整复制缓冲区的大小限制,以平衡数据一致性和系统稳定性。
复制积压区(ReplicationBacklog)
定义与作用:
- 复制积压区是主节点上的一个固定长度的队列,用于保存最近发送给从节点的写命令。这个队列是先进先出的,因此可以保存最近一段时间内的写命令数据。
- 当从节点与主节点的连接断开并重新连接时,如果它们之间的数据差异在复制积压区的范围内,那么从节点可以通过增量同步的方式快速追上主节点的数据。
大小与配置:
- 复制积压区的大小可以通过配置
repl-backlog-size
来设置,默认大小为1MB。 - 需要注意的是,复制积压区的大小会影响增量同步的效率和范围。如果复制积压区太小,可能会导致从节点无法找到足够的数据进行增量同步,从而需要执行全量同步。
工作原理:
- 当主节点接受到写命令时,它不仅会将命令发送给从节点,还会将命令写入复制积压区。
- 如果从节点断开连接并重新连接,它会向主节点发送自己的复制偏移量(即最后一次成功接收的命令的偏移量)。
- 主节点会根据这个偏移量在复制积压区中找到对应的命令数据,并将这些数据发送给从节点进行增量同步。
综上所述,Redis的复制缓冲区和复制积压区在主从复制过程中起着关键的作用。它们通过不同的机制来确保数据的一致性和系统的稳定性。在设计和部署Redis集群时,需要根据实际情况合理配置这两个组件的大小和参数。