English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
파티션은 데이터를 여러 개의 Redis 예제에 분할하는 처리 과정이며, 따라서 각 예제는 키의 하나의 부분만 저장합니다.
여러 台의 컴퓨터 메모리의 합을 활용하여 더 큰 데이터베이스를 구축할 수 있습니다.
다핵과 여러 台의 컴퓨터를 통해 계산 능력을 확장할 수 있습니다; 여러 台의 컴퓨터와 네트워크 어댑터를 통해 네트워크 밴드위드를 확장할 수 있습니다.
Redis의 일부 기능은 파티션에서는 잘 작동하지 않습니다:
여러 개의 키를 포함한 작업은 일반적으로 지원되지 않습니다. 예를 들어, 두 개의 set이 다른 Redis 예제에 매핑되어 있을 때, 이 두 개의 set에 대해 교집합 작업을 수행할 수 없습니다.
여러 개의 키를 포함한 Redis 트랜잭션은 사용할 수 없습니다.
파티션을 사용할 때, 데이터 처리가 복잡해집니다. 예를 들어, 여러 개의 rdb를 처리해야 합니다./aof 파일, 그리고 여러 예제와 호스트 백업 파일을 저장합니다.
용량을 추가하거나 제거하는 것도 복잡합니다. Redis 클러스터 대부분은 실행 중에 노드를 추가하거나 제거하는 투명한 데이터 균형 조정 기능을 지원하지만, 클라이언트 분할, 프록시 등 다른 시스템은 이 기능을 지원하지 않습니다. 그러나 presharding이라는 기술이 이 문제를 해결하는 데 도움이 됩니다.
Redis 有两种类型分区。 假设有4个Redis示例 R0,R1,R2,R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个示例中。也就是说,有不同的系统来映射某个key到某个Redis服务。
最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的Redis示例。
比如,ID从0到10000的用户会保存到示例R0,ID从10001到 20000的用户会保存到R1,以此类推。
这种方式是可行的,并且在实际中使用,不足就是要有一个区间范围到示例的映射表。这个表要被管理,同时还需要各种对象的映射表,通常对Redis来说并非是好的方法。
另外一种分区方法是hash分区。这对任何key都适用,也无需是object_name:这种形式,像下面描述的一样简单:
用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。
对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis示例中的一个了。93024922 % 4 = 2就是说key foobar应该被存到R2예제에서. 주의: 나머지 연산은 나누어 떨어지는 나머지를 의미하며, 일반적으로 다양한 프로그래밍 언어에서 % 연산자로 구현됩니다.