redis|集群

Redis集群

  • Redis 单副本
  • Redis 多副本(主从)
  • Redis Sentinel(哨兵)
  • Redis Cluster

Redis 单副本

Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。

……

阅读全文

Golang|panic、recover

panic

结构体

panic 关键字在 Go 语言的源代码是由数据结构runtime._panic表示的。每当我们调用 panic 都会创建一个如下所示的数据结构存储相关信息:

……

阅读全文

mq|Kafka速度分析

Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka的特性之一就是高吞吐率。

……

阅读全文

mq|kafka基础知识

kafka最初由Linkedin公司开发,是一个分布式、支持分区的、多副本的,基于zookeeper协调的分布式消息系统,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

……

阅读全文

redis|持久化存储

持久化流程

  • 客户端向服务端发送写操作(数据在客户端的内存中)。
  • 数据库服务端接收到写请求的数据(数据在服务端的内存中)。
  • 服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。
  • 操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。
  • 磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。

redis提供了RDB和AOF两种持久化存储方案

……

阅读全文

Golang|context

context意义

Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。

……

阅读全文

Golang|channel

channel结构体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
type hchan struct {
	qcount   uint           //大小
	dataqsiz uint           //有缓存的队列大小
	buf      unsafe.Pointer //有缓存的循环队列指针
	elemsize uint16
	closed   uint32
	elemtype *_type //类型
	sendx    uint   //有缓存的可发送下标
	recvx    uint   //有缓存的可存储下标
	recvq    waitq  //接受的goroutine抽象出来的结构体sudog的队列,是一个双向链表
	sendq    waitq  //同上,是发送的相关链表
	lock     mutex  //互斥锁
}
type waitq struct {
	first *sudog
	last  *sudog
}

channel创建

1
ch := make(chan int, 3)

创建channel实际上就是在内存中实例化了一个hchan的结构体,并返回一个ch指针,我们使用过程中channel在函数之间的传递都是用的这个指针,这就是为什么函数传递中无需使用channel的指针,而直接用channel就行了,因为channel本身就是一个指针。

……

阅读全文