网站平台建设的流程,雄安哪里在建设,百度权重高的发帖网站,app安装软件下载#xff08;1#xff09;单节点Redis问题 缓存大家都不陌生#xff0c;在企业里面只要做缓存都会用到Redis#xff0c;我们在使用的时候都是做的单节点部署#xff0c;单节点部署是存在一些问题的#xff0c;分布式缓存正是Redis的集群#xff0c;正是为了解决单节点部署…1单节点Redis问题 缓存大家都不陌生在企业里面只要做缓存都会用到Redis我们在使用的时候都是做的单节点部署单节点部署是存在一些问题的分布式缓存正是Redis的集群正是为了解决单节点部署的问题的
单节点Redis存在的问题 Redis是基于内存存储并发能力非常强但是毕竟单节点到了618等节日电商场景还是无法满足高并发场景 业务对Redis的依赖非常多不仅仅把它做为缓存有时候还把它作为分布式Session 等等Redis应用场景如此的多一旦它出现故障对整个微服务影响范围也很大我们得保证Redis集群是持续可用的一旦集群中任何一个服务出现故障不能够影响其他服务的使用必须保证在运行的过程中去修复故障的节点实现在线边运行边修复的效果单节点Redis做不到 主从集群从节点有很多个多个从节点之间就是负载均衡主从之间做读写分离应对数据库中读写的互斥做了读写的分离读和写之间就不会有影响了并发能力也就更强了也满足高可用的效果因为主宕机了还有从顶上去进一步避免宕机导致的数据丢失虽然书从节点很多但是一直挂下去总有一天会挂完所以不仅人多做主从还要保证一旦有人挂了要把它扶起来故障恢复就要靠哨兵机制了
我们做了主从集群存储上限还是单个节点的存储上限我们可以学习ES在ES中我们把数据分片保存在不同的节点上存储更多的数据Redis搭建分片集群利用插槽机制实现数据分散还可以动态扩容 2Redis持久化-RDB 启动 Redis客户端建立连接 Redis在停机是自动执行Save存储数据快照 按Ctrl C关机的时候执行的Save同步 数据快照默认保存在运行目录 重新启动Redis会读取RDB快照文件 数据还在 数据持久化都是停机后执行的那么突然宕机了没有做持久化我们需要没隔一段时间就做一下持久化RDB默认就开启了RDB是bgsave异步 修改了快照名称当启动Redis的时候并没有数据恢复的日志因为没有这个快照有的话就会显示 此时再获取数据就没有了因为快照名称修改了
重新添加一个key 看到Redis的日志 进行了持久化 Redis如果设置策略时间太长中间的这一段时间做了数据的写入没有持久化就会导致数据丢失如果调短一些设置为1s行不不行的如果你的时间调的非常短RDB执行的频率就会过高每一秒执行一次数据量小还好如果数据量很大10G写入磁盘1秒执行一次根本忙不过来因此来说时间也不能做的太短也不能太长使用默认的就可以了如果在默认的时间内出现了数据丢失怎么办呢后面会学习其他的持久化方案AOF对RDB进行一个弥补
3RDB异步持久化原理-Bgsave
bgsage开始fork主进程是得到子进程的时候是阻塞的此时主进程只能干这件事为了加快速度完成这件事主进程尽快的去处理用户的请求避免阻塞时间过久fork底层是怎么实现的呢
之后是异步的
物理内存可以理解计算机的内存条主进程实现对Redis的读写肯定是在内存中操作在Linux系统中所有的进程都没有办法直接操作物理内存而是由操作系统给每个进程分配一个虚拟内存主进程只能操作虚拟内存操作系统会维护一个虚拟内存与物理内存之间的映射表称为页表主进程操作虚拟内存虚拟内存基于页表的映射关系到物理内存中真正的存储位置就能实现对物理内存数据的读写了
在fork的时候并不是把内存数据做拷贝而是把页表做拷贝子进程在操作虚拟内存时根据页表跟主进程一样一定能映射到相同的物理内存区域就可以实现子进程跟主进程的内存共享了这样无需拷贝内存中的数据而实现内存共享这样速度就会非常的快阻塞的时间也就非常的短了 这就是异步的持久化是异步的子进程在写RDB的过程中主进程也可以接收用户的请求去修改内存中的数据这个时候子进程在读主进程在写会有冲突为了避免fork底层会采用copy_on_write的机制 主进程可能会在子继承复制的过程中可能会修改到每一份数据此时所有的数据都会拷贝一份此时以为这Redis对内存的占用也就翻倍了 这是极端的情况有可能会发生。 4Redis持久化-AOF
RDB持久化有可能导致数据丢失的 因为它两次持久化时间间隔较长下面学习AOF持久化他可以弥补RDB 禁用RDBsave“” 开启AOF 重启RedisRedis并没有读取数据 重新存一个数据 生成一个aof文件 停止Redis 重启数据会加载AOF AOF 会记录所有命令体积会比RDB大因为一个可以可能重复操作多次当重启的时候它会一次执行命令此时很多命令是重复的执行没有意义 解决 有了AOF要RDB干嘛RDB充当的是备份的作用把数据备份到磁盘或者把数据拷贝放到别的而地方中去其他机器其他机房来实现异地容灾如果说机房都毁了AOF 就废了但是把它拷贝到了别的机房数据就能实现永远都能够恢复的它起到了一种数据恢复的作用