Rabbitmq消息的可靠性 发表于 2020-01-13 在Rabbitmq中,一个消息从生产者发布到消费者消费完成会经历四个部分: 生产者投递消息给exchange exchange路由消息到队列 消息在队列中存储 消费者订阅队列取出消息并进行消费 这四部分都有丢失的可能, 下面来分别对这四部分可能丢失的情况提出解决方案。 生产者投递消息这 ... 阅读全文 »
Rabbitmq总结 发表于 2020-01-06 消息中间件的作用异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。 日志处理 - 解决大量日志传输。 消息通讯 - 消息队列一般都内置了高效的通信机制, ... 阅读全文 »
人生首百:石野100赛记 发表于 2019-12-31 这篇赛记在我印象笔记里躺了两个月,是时候了结它了。基本上是个流水账,文章比较长,介意勿入。 10月25号带着两大包装备,从北京西站坐上了到石家庄的火车,准备去参加次日开始的石家庄野人百公里越野赛。这是我第一次参加百公里级别的越野赛。 对于百公里越野是个什么概念,我并不是特别清楚,之前跑的最远的距离 ... 阅读全文 »
进程的堆和栈 发表于 2019-09-20 堆和栈简介每个进程有一些可以使用的地址集合,典型值从0到某个最大值,叫做地址空间。这是操作系统为进程提供的一个抽象,是以进程的视角所看到的系统中的内存。 一个进程的地址空间通常包括代码段、数据段、堆、栈,地址从低到高。注意这里的堆和栈不同于数据结构中的堆和栈。 代码段:可执行的代码 数据段: 1. ... 阅读全文 »
Redis的复制过程 发表于 2019-04-20 连接和配置Redis实例分为主节点和从节点,默认都是主节点,每个从节点只能有一个主节点,一个主节点可以有多个从节点。 使用slaveof命令配置复制,可以提前写到配置文件中,也可以运行期动态配置。 配置复制的方式: 配置文件中加入slaveof {masterHost} {masterPort}, ... 阅读全文 »
Redis事件循环 发表于 2019-04-13 Redis服务器启动之后,会调用initServer进行初始化,并创建一个空的事件循环(EventLoop), 由一个事件循环的结构体保存事件循环的各种数据: aeEventLoop结构体12345678910111213/* 事件循环结构体 */typedef struct aeEventLoop ... 阅读全文 »
Redis Hash的实现 发表于 2019-04-06 字典(hash)在Redis中使用非常广泛,Redis的数据库就是使用字典作为底层实现的,对数据库的增删改查也是建立在对字典的操作上的。Redis的字典使用哈希表作为底层实现。 哈希表节点哈希表中的一个节点用来存储一个键值对,下面是哈希表节点结构的定义: 12345678910typedef str ... 阅读全文 »
Go接口的使用 发表于 2019-03-21 Duck TypingGo语言通过接口(interface),实现了Duck Typing。它是一种抽象类型,描述代表了一组方法的集合。 在Go中接口包含两种含义: 它既是方法的集合, 同时还是一种类型. 在Go语言中是隐式实现的,意思就是对于一个具体的类型,不需要声明它实现了哪些接口,只需要提供接 ... 阅读全文 »
Go读书笔记总结 发表于 2019-03-02 笔记内容来自雨痕的《go学习笔记》。 变量类型决定了变量内存的长度和存储格式,我们只能修改变量值,无法改变类型。 用var声明变量,类型放在变量名后 var x int // 会被自动初始化为其零值 var y = false // 显式提供初始化值,可省略变量类型 var x, y ... 阅读全文 »
Python高级用法 发表于 2019-03-01 *args和**kwargs*args 和 **kwargs 主要用于函数定义。 你可以将不定数量的参数传递给一个函数. *args 是用来发送一个非键值对的可变数量的参数列表给一个函数 12345def print_args(f_arg, *argv): print("first norma ... 阅读全文 »