Skip to content

Commit 5a47fbd

Browse files
authored
Merge pull request KeKe-Li#741 from KeKe-Li/feature-keke
Update golang.01.md
2 parents 6e151b6 + eb2b623 commit 5a47fbd

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/chapter05/golang.01.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ Golang面试问题汇总, 这里主要分为 Golang, Mysql, Redis, Network Proto
9999
| 9 | [Redis的主从模式和哨兵模式和集群模式区别](#Redis的主从模式和哨兵模式和集群模式区别) |
100100
| 10 | [Redis有序集合zset底层怎么实现的](#Redis有序集合zset底层怎么实现的) |
101101
| 11 | [跳表的查询过程是怎么样的,查询和插入的时间复杂度](#跳表的查询过程是怎么样的,查询和插入的时间复杂度) |
102+
| 12 | [redis如何分片](#redis如何分片) |
102103

103104
### 网络协议基础
104105

@@ -4940,6 +4941,27 @@ Redis中的set数据结构底层用的是跳表和哈希表实现的(新的版
49404941
49414942
先从第一层查找,不满足就下沉到第二层找,因为每一层都是有序的,写入和插入的时间复杂度都是O(logN)
49424943
4944+
12. #### redis如何分片
4945+
4946+
Redis Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。一般来说,主 Redis 节点会处理 Clients 的读写操作,而从节点只处理读操作。
4947+
4948+
分布式数据存储方案中最为重要的一点就是数据分片,也就是所谓的 Sharding。
4949+
4950+
为了使得集群能够水平扩展,首要解决的问题就是如何将整个数据集按照一定的规则分配到多个节点上,常用的数据分片的方法有:范围分片,哈希分片,一致性哈希算法,哈希槽等。
4951+
4952+
范围分片假设数据集是有序,将顺序相临近的数据放在一起,可以很好的支持遍历操作。范围分片的缺点是面对顺序写时,会存在热点。比如日志类型的写入,一般日志的顺序都是和时间相关的,时间是单调递增的,因此写入的热点永远在最后一个分片。
4953+
4954+
4955+
Redis Cluster 采用虚拟哈希槽分区,所有的键根据哈希函数映射到 0 ~ 16383 整数槽内,计算公式:slot = CRC16(key) & 16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。
4956+
4957+
Redis 虚拟槽分区的特点:
4958+
4959+
* 解耦数据和节点之间的关系,简化了节点扩容和收缩难度。
4960+
* 节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据
4961+
* 支持节点、槽和键之间的映射查询,用于数据路由,在线集群伸缩等场景。
4962+
4963+
Redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容。可以说,槽是 Redis 集群管理数据的基本单位,集群伸缩就是槽和数据在节点之间的移动。
4964+
49434965
### 网络协议基础
49444966
49454967
1. #### TCP和UDP有什么区别

0 commit comments

Comments
 (0)