English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Redis 파티션

파티션은 데이터를 여러 개의 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예제에서. 주의: 나머지 연산은 나누어 떨어지는 나머지를 의미하며, 일반적으로 다양한 프로그래밍 언어에서 % 연산자로 구현됩니다.