redis 为什么是奇数
-
Redis之所以选择使用奇数作为分片的数量,主要有以下几个原因。
首先,奇数作为分片数量可以更好地支持数据的扩展和负载均衡。在使用奇数数量的分片时,对于每个数据项,很容易确定它应该存储在哪个分片中,而不需要进行额外的计算。而如果使用偶数数量的分片,由于每个分片上存储的数据量是平均的,可能会导致某些分片的存储负载过大,而其他分片的负载较轻。
其次,奇数数量的分片可以更好地应对节点故障和容错性。当使用奇数数量的分片时,可以确保存在大于一半的分片可用时数据仍然可用,即使有一个分片出现故障或不可用。而如果使用偶数数量的分片,则需要在有一半以上的分片可用时数据仍然可用。
此外,奇数数量的分片可以更好地处理哈希冲突的问题。在分片中,通常会使用哈希函数将数据映射到不同的分片中,但是由于哈希函数的不完美性,可能会导致多个数据项被映射到同一个分片中,即哈希冲突。而当使用奇数数量的分片时,可以采用一些常用的解决哈希冲突的方法,例如链地址法,来处理哈希冲突问题。
综上所述,Redis选择使用奇数作为分片的数量,是基于扩展性、负载均衡、容错性以及哈希冲突的考虑。通过使用奇数数量的分片,可以更好地支持数据的扩展和负载均衡,提高系统的容错性,并有效地解决哈希冲突的问题。
1年前 -
Redis默认端口为6379,而不是一个偶数端口。这是因为奇数端口通常用于监听TCP连接,而偶数端口用于监听UDP连接。Redis是一个基于TCP协议的数据库服务器,因此使用奇数端口更符合传统的网络协议标准。
以下是关于为什么Redis使用奇数端口的几个原因:-
避免与其他常用端口冲突:奇数端口通常不会与其他常用的网络服务端口冲突。例如,HTTP服务使用的默认端口是80,HTTPS是443,MySQL是3306,等等。为了避免与这些服务冲突,Redis选择了一个不太可能被其他服务使用的奇数端口。
-
提高安全性:使用非常见的端口可以提高Redis服务器的安全性,因为攻击者通常会扫描常用端口的服务。选择一个非标准端口可以减少被扫描的风险。
-
简化配置:默认端口的选择也可以简化配置。大多数Redis客户端将默认使用6379端口进行连接,这意味着在配置客户端时不需要指定端口号。如果Redis使用了一个奇数端口,那么使用默认配置可以避免在客户端配置中指定端口号。
-
遵循约定:奇数端口用于TCP连接,而偶数端口用于UDP连接是一种约定。虽然Redis没有使用UDP连接,但遵循这种约定可以使Redis更符合网络协议的通用规范。
-
可以更易于识别:在一台主机上运行多个服务时,使用奇数端口可以使Redis服务更易于识别。通过查看服务器上的端口列表,可以快速找到Redis服务所使用的奇数端口。
总而言之,Redis使用奇数端口是为了避免与其他服务冲突,提高安全性,简化配置,并遵循网络协议的通用约定。虽然这不是强制要求,但是选择奇数端口是一种良好的实践。
1年前 -
-
为了确保在 Redis 的数据结构中,每个分片或分区都能够正常运行,并且较好地分布数据,Redis 设计了一种特殊的哈希槽位分配算法,使用奇数个哈希槽位。下面将从几个方面介绍为什么 Redis 使用奇数的哈希槽位。
- 哈希分片算法
Redis 使用一致性哈希算法将键分布到不同的槽位上。一致性哈希算法将哈希空间划分为多个连续的范围,并为每个范围分配一个哈希槽位。这样,在增加或删除节点时,只需要将一小部分的键重新分配到新的节点上,可以最大限度地减少数据的重新分布,提高了性能和效率。
在一致性哈希算法中,选择奇数个哈希槽位是为了解决哈希冲突的问题。当有多个节点使用相同哈希槽位时,使用奇数的哈希槽位可以更好地均匀分布数据,降低哈希冲突发生的概率。
- 数据分布均匀
使用奇数个哈希槽位可以确保数据在不同节点之间分布均匀。如果使用偶数个哈希槽位,当节点的数量超过一半时,必然会有一些节点的哈希槽位数比其他节点多。这会导致数据在某些节点上更加集中,从而影响系统的负载均衡和性能。
- 易于扩展
使用奇数个哈希槽位还简化了 Redis 的扩展操作。当需要增加或减少节点时,只需要重新计算一小部分的键的哈希值并将其重新分配到新的节点上,而不需要重新分配所有的键。这样可以避免数据的大规模迁移,提高了扩展的效率和可靠性。
总结来说,Redis 选择使用奇数个哈希槽位是为了提高数据的分布均匀性、降低哈希冲突、简化扩展操作。这样可以充分利用多台服务器的性能,提高系统的容错性和可用性。
1年前