方波
1、redis实现集群需要解决的问题列表:
- 1 多key读写(mget mset)
- 2 多key计算(集合交并集计算)
- 3 扩缩容
- 4 proxy冗余
2、一致性hash环:
- 1 一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,比如redis的16384个slot。
- 2 将机器虚拟并随机在环上分配相应slot区间。随机虚拟节点是为了解决数据倾斜问题。
- 3 增加机器时,将原区间上的数据重新hash到两个区间,比如[b2, c1],加入d3为[b2, d3], [d3, c1]
- 4 机器故障时,只会影响分配到该机器的key。
3、go协程与线程的讨论
go调度器如何管理goroutine:
实验代码:
package main
import (
"fmt"
"time"
)
func main() {
for i:=0;i<10000;i++ {
go func() {
fmt.Println("start ", i)
time.Sleep(time.Duration(100)*time.Second)
fmt.Println(i)
}()
}
time.Sleep(time.Duration(2000)*time.Second)
fmt.Println("main end")
}
- 当for循环创建10w协程时,线程数量大约1w+;
- 当for循环创建1w协程时,线程数量大约700+;
原理部分,后续阅读golang源码再进一步定位。
有疑问加站长微信联系(非本文作者)