首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Go微服务系统精讲 Go-Zero全流程实战即时通讯 ( IM )

微服务的扩展性通过AFK扩展立方体来描述,包括水平扩展(X轴)、垂直扩展(Y轴)和数据分区(Z轴)。业务边界的划分采用领域驱动设计(DDD),通过界定上下文和聚合,形成稳定的业务内核。...goctl:Go-Zero的命令行工具,安装命令如下:bashGOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero.../命令,可以根据.api文件生成API文档。...生成API代码:使用goctl api go命令或别名apigen生成API的Go代码。构建项目结构:包括内部逻辑、服务上下文、类型定义等。下载依赖:运行go mod tidy命令整理模块依赖。...生成RPC代码:使用goctl rpc protoc命令或别名rpcgen生成RPC的Go代码。查看生成目录:确认生成的代码结构是否符合预期。下载依赖:运行go mod tidy命令整理模块依赖。

17210

图片服务器搭建

tar-zxvf nginx-1.8.0.tar.gz 使用解压命令后再次查询效果如下: 3.2.5配置makefile Step1:打开解压后的ngnix目录,命令cdnginx-1.8.0...25B3%2595make&rsv_pq=e495e51a00000827&rsv_t=37fcvNmXDaMLD%2FcuFCpqGiY0qkHBv%2Fy24Tlbo4l9%2BGuubeoI5nS9AFk2swmKV7nw3akVAc7T...3.2.6编译 nginx目录下 执行命令make 进行编译   makeinstall 进行安装 3.2.7启动nginx cd/usr/local/nginx/sbin/ ..../nginx -s stop 此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。 方式2,完整停止(建议使用): cd /usr/local/nginx/sbin ....3.2.9重启nginx 方式1,先停止再启动(建议使用): 对nginx进行重启相当于先停止nginx再启动nginx,即先执行停止命令再执行启动命令。 如下: ./nginx -s quit .

6.6K70

Redis 源码简洁剖析 15 - AOF

AOF 是什么 AOF 持久化的实现 命令追加 AOF 文件的写入和同步 AOF 文件的载入和数据还原 AOF 重写 为什么需要重写 什么是重写 如何重写 AOF 后台重写 为什么需要后台重写...,在重写期间,服务器将无法处理客户端发来的命令请求。...带来的问题 子进程在进行 AOF 重写期间,服务器进程还需要继续处理命令请求,新的命令可能对现有的数据库状态进行修改,导致服务器当前数据库状态和重写后的 AOF 文件保存的数据状态不一致。...AOF 重写缓冲区 为了解决这种数据不一致的问题,Redis 设置了一个 AOF 重写缓冲区,在服务器创建子进程之后开始使用,当 Redis 服务器执行完一个写命令后,同时将这个写命令发送给 AOF 缓冲区和...,如果元素数量超过了一个常量阈值,重写程序会使用多条命令来记录键的值。

26710

redis 学习(18)-- AOF

AOF 的三种策略 1. always 含义:执行每条写命令都会将写命令写到磁盘中 ?...AOF 重写 注意这里的重写并不是说将 redis 命令重新抽象成新的 redis 命令,再写入 AOF 文件,而是执行 redis 命令后将内存中的数据进行回溯,重写成 AOF 文件。 1....AOF 重写实现方式 - bgrewriteaof 客户端发送出一条bgrewriteaof命令后,redis会fork一个子进程完成AOF重写操作逻辑。 ? 3....看得不太清楚,我们用 head 命令打印 aof 文件头部信息: ? 使用重写命令: ? 我们使用 dbszie 重新查看一下数据大小,可以看到文件非常小,只有三个 key: ?...打印一下重写后的 appendonly.aof : ? 可以看到重写后的命令变成了: seletc 0 set counter 2 set counter redis rpush list a b c

55820

Redis中AOF文件的数据格式以及重写过程

当子进程完成AOF重写后,Redis会将新的AOF文件替换掉旧的AOF文件,并开始使用新的AOF文件进行持久化操作。需要注意的是,在AOF重写过程中,Redis会继续处理客户端的命令请求。...完成AOF重写后,Redis会将新的AOF文件当做主AOF文件,并丢弃旧的AOF文件。AOF重写的优点是可以解决旧的AOF文件过大的问题,同时还可以减少AOF文件中保存的命令数量,提高恢复速度。...停止在原AOF文件中追加写入操作:在AOF重写期间,Redis会停止将写入命令追加到原AOF文件中,以确保在重写期间数据的一致性。...缓冲待写入的命令:在AOF重写期间,所有新的写入命令都会被缓冲起来,暂时保存在内存中,而不是立即写入到AOF文件中。...AOF后台重写命令是BGREWRITEAOF,执行该命令后,Redis会异步地创建一个新的AOF文件,并将旧的AOF文件的内容压缩后写入新文件。

63651

redis灵魂拷问:聊一聊AOF日志重写

“ AOF日志重写到底会不会阻塞主线程?” 01 — AOF介绍 redis的AOF日志,是redis持久化的一种方式,它是一种write after log,即先执行命令后记录日志。...auto-aof-rewrite-min-size 64mb #aof文件大小超过64m时重写 下面我们执行6条命令: 192.168.59.146:6379> set name jinjnzhu OK...,但是AOF重写后日志文件就剩了最后2条命令。...但是AOF重写过程中收到了foo这个key的写命令,这时主线程需要拷贝一份数据到新的内存空间进行修改。 ? 在AOF重写的过程中,如果有新的写命令到来了,会影响AOF重写吗?...当然不会,新的写命令不仅会记录到AOF日志的缓存区,还会记录到重写的新AOF日志缓存区,这样当AOF重写结束后,把重新缓存区数据写到新AOF文件,就不会丢失了。

1.3K41

Redis持久化AOF原理+伪代码实现

举个例子 时间 服务器进程 子进程 t1 执行命令 SET k1 v1 t2 执行命令 SET k1 v2 t3 执行命令 SET k1 v3 t4 创建子进程,执行AOF文件重写 开始AOF文件重写...t5 执行命令 SET k2 100 执行重写操作 t6 执行命令 SET k3 101 执行重写操作 t7 执行命令 SET k4 102 完成AOF重写 上面展示了一个 AOF 文件重写例子,当子进程开始进行文件重写时...这也就是说,在子进程执行 AOF 重写期间,服务器进程需要执行以下三个工作: 执行客户端发来的命令 将执行后的写命令追加到 AOF 缓冲区 将执行后的写命令追加到 AOF 重写缓冲区 ?...完整的重写过程如下: 时间 服务器进程 子进程 t1 执行命令 SET k1 v1 t2 执行命令 SET k1 v2 t3 执行命令 SET k1 v3 t4 创建子进程,执行AOF文件重写 开始...AOF文件重写 t5 执行命令 SET k2 100 执行重写操作 t6 执行命令 SET k3 101 执行重写操作 t7 执行命令 SET k4 102 完成AOF重写,向父进程发送信号 t8 接受到子进程发来的信号

48510

Redis-如何实现持久化(AOF、RDB、混合模式)的优缺点

AOF日志是一个文件,随着写命令的执行,文件会越来越大,如果文件过大就会带来性能问题,比如AOF恢复中执行的命令就会很多就会导致恢复过程很慢 所以Redis提供了AOF重写机制,当AOF文件大小超过设定的阈值时...,并逐一把内存数据的键值对转换成另一条命令,再将命令记录到重写日志(新的AOF文件) 但是重写过程中,主进程依然可以正常处理命令,所以就出现了问题,如果主进程修改了已经存在的key-value,那么就会发生写时复制...在重写AOF期间,当Redis执行完一个写命令之后,它会同时把这个写命令放入AOF缓冲区与AOF重写缓冲区 也就是说在bgwriteaof期间,主进程需要执行三个工作 1、 执行客户端发来的命令...2、将执行后的命令写入AOF缓冲区 3、将执行后的命令写入AOF重写缓冲区 当子进程重写完成之后会向主进程发送一条信号,信号是进程间通信的一种方式 主进程收到该信号后,会调用一个信号处理函数...,如果频率过低,数据丢失的量就比较多,如果频率高就会影响性能 所以退出了混合持久化集成两者优点,在AOF重写日志时,fork出来的子进程会把当前主线程共享的内存数据以RDB方式写入到AOF文件,然后主线程处理的命令被记录到重写缓冲区中

29830

宕机了,缓存数据没了。。。

但是在触发 AOF 重写时,比如当 AOF 文件大于 64M 时,就会对 AOF 文件进行重写,这时是需要读取所有缓存的键值对数据,并为每个键值对生成一条命令,然后将其写入到新的 AOF 文件,重写完后...,主进程就会创建重写 AOF 的子进程,此时父子进程共享物理内存,重写子进程只会对这个内存进行只读,重写 AOF 子进程会读取数据库里的所有数据,并逐一把内存数据的键值对转换成一条命令,再将命令记录到重写日志...在重写 AOF 期间,当 Redis 执行完一个写命令之后,它会同时将这个写命令写入到 「AOF 缓冲区」和 「AOF 重写缓冲区」。...重写缓冲区」; 当子进程完成 AOF 重写工作(扫描数据库中所有数据,逐一把内存数据的键值对转换成一条命令,再将命令记录到重写日志)后,会向主进程发送一条信号,信号是进程间通讯的一种方式,且是异步的。...重写的过程是由后台子进程完成的,这样可以使得主进程可以继续正常处理命令

1.4K30

Redis 持久化之AOF持久化&混合持久化

用户可以选择BGREWRITEAOF命令,来后台执行重写AOF文件命令,这个过程中会消除冗余的命令,来尽可能的减小AOF大小。...auto-aof-rewrite-min-size 用来指定AOF到达多大体积时才进行AOF重写,Redis 就是用这两个配置来控制AOF重写的(同时达到时才进行重写),整个重写的过程和BGSAVE比较相似...image.png 从实现角度来看,AOF持久化大致分为命令追加、文件写入、文件同步三个步骤 当一条命令写入时,会以上面提到的协议格式话被执行的命令然后追加到服务器状态的aof_buf缓冲区的末尾,服务器执行完写命令之后...上面提到了在重写是通过fork子进程来执行的,这样主要是为了防止长时间阻塞主进程,在子进程重写的期间,主进程可以继续处理命令,不使用线程的原因是,开一个新的线程是无法携带主进程数据副本的,也就没办法避免与主进程竞争...至于主进程数据与子进程的数据副本不一致的问题而言,redis设置了AOF重写缓冲区,在子进程重写期间,主进程执行的每一个写命令都会写到重写缓冲区,然后子进程完成重写之后,再将重写缓冲区的数据写入到重写

1.6K20

《Redis设计与实现》读书笔记(十五) ——Redis AOF持久化原理与实现

四、aof重写 1、重写过程 随着时间推移,写命令会逐渐堆积,文件越来越大,而且还原速度会越来越慢。如对同一个键,区分多次进行操作,则在aof中也是多行记录来记录,并不是记录最后一次状态。...这样效率较低,则需要aof重写重写命令是bgrewriteaof。 redis对aof文件的重写,并不是真的打开aof文件并分析里面的内容,而是根据redis服务器现有的状态来实现的。...为了避免此问题,redis设置一个aof重写缓冲区,当在执行aof重写期间,redis完成一个客户端的写请求后,会同时将这个命令发送给aof缓冲区与aof重写缓冲区。如下图所示: ?...7、在执行bgrewriteaof命令,redis会先创建一个aof重写缓冲区,并创建一个子进程,由子进程进行aof重写的工作,主进程仍处理客户端的请求。...在重写过程中,如果客户端发来写命令,除了主进程执行写命令外,还会将该命令写入aof重写缓冲区中。

91050

Redis详解(七)------ AOF 持久化

如果不进行 AOF 文件重写,那么 AOF 文件将保存四条 SADD 命令,如果使用AOF 重写,那么AOF 文件中将只会保留下面一条命令: sadd animals "dog" "tiger" "panda...这里再提一下,我们知道 Redis 是单线程工作,如果 重写 AOF 需要比较长的时间,那么在重写 AOF 期间,Redis将长时间无法处理其他的命令,这显然是不能忍受的。...使用子进程解决了上面的问题,但是新问题也产生了:因为子进程在进行 AOF 重写期间,服务器进程依然在处理其它命令,这新的命令有可能也对数据库进行了修改操作,使得当前数据库状态和重写后的 AOF 文件状态不一致...为了解决这个数据状态不一致的问题,Redis 服务器设置了一个 AOF 重写缓冲区,这个缓冲区是在创建子进程后开始使用,当Redis服务器执行一个写命令之后,就会将这个写命令也发送到 AOF 重写缓冲区...例如,如果我们不小心错用了 FLUSHALL 命令,在重写还没进行时,我们可以手工将最后的 FLUSHALL 命令去掉,然后再使用 AOF 来恢复数据。

39600
领券