Liangjf

The darkest hour is that before the dawn.

redis客户端缓冲区

redis客户端缓冲区

redis客户端缓冲区 客户端缓冲区原理 redis网络架构是Reactor模型, 基于io多路复用, 每个客户端一条连接, 然后redis负责监听每个连接的非阻塞io的读写事件, 然后触发对应的响应处理函数 读事件监听是一直存在的, 但是写事件是在需要的时候通过构造一个写对象的结构, 发送到对象结构的客户端写缓冲区, 另外一端会根据客户端写缓冲区的对象有无来触发一次写事件, 然后就会触...

redis网络模型

redis网络模型

redis网络模型 redis的网络涉及以下文件(与客户端) server.c(redis server入口) ae.c(redis 网络模型ae对象, 封装了epoll/select/kqueue/evport) ae_epoll.c/ae_evport.c/ae_kqueue.c/ae_select.c(操作系统的网络系统函数) anet.c(对socket的操作的...

redis-go-cluster

从redis-go-cluster报错源码分析

从redis-go-cluster报错源码分析 redis-go-cluster报错: client can't connect to Redis cluster, node.address is 172.16.7.16:8002@18002 现象: 可以连接集群, 但是执行命令出错 redis版本: redis-5.0.5 redis-go-cluster版本: 1.0.0 可以查...

sync.RWMutex

sync.RWMutex源码分析

sync.RWMutex源码分析 读写锁 原理: 读操作可并发重入,写操作是互斥的。 读写锁通常用互斥锁、条件变量、信号量实现 实现: 通过原子变量(模拟条件变量), 信号量与互斥锁结合的方式, 实现读写锁; 主要是借助原子变量, 信号量控制模拟了读写的等待和唤醒 一直有读锁进来, 写锁就一直饿死? 不会的, 通过readerWait会记录下写锁前的最后一个读锁, 这个读锁释放锁后...

sync.Once

sync.Once源码分析

sync.Once源码分析 sync.Once是借助原子变量和锁来实现函数只执行一次的功能. 通过上锁, 避免首次并发竞争, 以后是通过atomic来cas获取变量状态来判断是否已执行, 提高效率 由于首次doSlow会上锁, 因此首次并发情况下, 会出现其他goroutine等待函数执行完并设置了done标志, 这里会有一个延时等待, 但是结合Once的使用, 一般是作为初始化时使...

sync.Map

sync.Map源码分析

sync.Map源码分析 思路 通过两个map, 一个是只读map[read], 一个是读写map[dirty], 通过expunged标记和misses阈值来触发dirty覆盖更新read; 读操作, 先去read中查询, 没有再去dirty中查询, 逻辑上的读写分离, 提高查询效率(sync.Map适用于高并发中多读少写); 存储操作, 先尝试对read的key更新, 没...

mysql同步redis

通过MySQL触发器UDF自动同步刷新Redis

通过MySQL触发器UDF自动同步刷新Redis 将编译得到的动态库放入/usr/lib/mysql/plugin h_myredis_udf.so libmysql_redis_udf_2nd.so libmysql_redis_udf.so libmysql_json_udf.so 下载地址 创建数据库, 数据表, 触发器, udf #创建数据库 create...

性能问题分析

go+grafana+influxdb性能分析和问题排查

go+grafana+influxdb性能分析和问题排查 组件: go程序 grafana influxdb 1.在Docker容器中运行InfluxDB和Grafana docker run --name influxdb -d -p 8086:8086 influxdb docker run -d -p 9090:3000/tcp --link influxdb -...

grpc

grpc服务发现分析

grpc服务发现分析 etcdv3作为grpc服务发现组件 github naming naming/naming.go grpc自带只支持dns域名解析名字服务注册发布, 但是通过开放接口的形式, 满足用户的自定义名字发现组件 创建一个监视器,返回是Watcher, 用于监视目标域名的名称解析, 从而得到ip地址 ```go type Resolver interface { ...

grpc

grpc压缩编解码

grpc压缩编解码 encoding/encoding.go:23 源码分析 压缩接口 type Compressor interface { Compress(w io.Writer) (io.WriteCloser, error) Decompress(r io.Reader) (io.Reader, error) Name() string } 编码接口 typ...