作者:施洪宝
一. go 基础
- go通过锁或者原子操作解决协程之间的竞争问题, 本文主要介绍锁
- go通过通道(有缓冲和无缓冲)解决协程之间的通信问题, 一个协程可能同时与多个其他协程通信, 此时可以通过select进行处理
1.1 锁
- mutex
- mutex即是一般的互斥锁, 只有一个协程可以获取锁, 其他协程获取时会被阻塞
- rwmutex
- rwmutex为读写锁, 某一时刻可能存在多个读锁或者一个写锁
- lock可以获取写锁, 该调用会一直阻塞直到其他协程释放锁, 写锁的优先级高于读锁; unlock释放写锁
- rlock获取读锁, 当只有读锁或者没有锁时可以成功获取锁, 否则被阻塞; runlock释放读锁
1.2 select
select{
case communication clause:
statement(s)
case communication clause:
statement(s)
/* 可以定义任意多个case */
/* default也可以不定义 */
default:
statement(s)
}
- 每个case 必须是chan操作, 可以为读或者写
- 如果只有一个case可以执行, 则执行该case
- 如果有多个case可以执行, 伪随机一个case执行, 其他不执行
- 没有case可以执行则执行default
- 没有default并且没有case可以执行则一直阻塞, 直到某个case可以执行
二. Codis
- Codis的结构图如下(该图来源于https://github.com/CodisLabs/...
- 从Codis结构图中可以看出以下几点
- codis-group由多个codis-server(也就是redis-server)构成,每个codis-group中存在一个master服务器和任意多个slave服务器
- codis-proxy与每个codis-group中的服务器建立连接,并且将自己注册到zookeeper(或者etcd等)中, 客户端从zookeeper中获取可用的codis-proxy, 并与其建立连接, 之后由codis-proxy负责处理客户端的请求
- codis-dashboard为codis集群管理工具: 能够完成codis-proxy、codis-group、codis-server的增加以及删除; 数据在codis-group之间的迁移(也就是slot迁移)
- codis-fe为集群管理页面
Codis自带的测试程序
- codis-fe默认监听的端口为9090
- codis-dashboard默认的监听端口为18080
- codis-proxy默认的监听端口为11080
- codis-server默认监听的端口为6379(也就是redis默认的监听端口)
有疑问加站长微信联系(非本文作者)