English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
El particionamiento es el proceso de dividir los datos en múltiples instancias Redis, por lo que cada instancia solo almacena un subconjunto de keys.
A través de la utilización de la suma de la memoria de múltiples computadoras, nos permite construir una base de datos más grande.
A través de múltiples núcleos y múltiples computadoras, nos permite expandir la capacidad de cálculo; a través de múltiples computadoras y adaptadores de red, nos permite expandir el ancho de banda de red.
Algunas características de Redis no se comportan muy bien en términos de particionamiento:
Las operaciones que involucran múltiples keys generalmente no son admitidas. Por ejemplo, cuando dos mapeos de set se asignan a diferentes instancias Redis, no puedes realizar una operación de intersección entre estos dos sets.
No se puede usar una transacción Redis que involucre múltiples keys.
Cuando se utiliza el particionamiento, el procesamiento de datos es bastante complejo, por ejemplo, necesitas manejar múltiples rdb./archivo aof y desde múltiples ejemplos y copias de seguridad de hosts.
Añadir o eliminar capacidad también es bastante complejo. La mayoría de los clústeres Redis admiten la capacidad de equilibrar datos transparentemente en tiempo de ejecución al agregar o eliminar nodos, pero otros sistemas como el particionamiento de clientes, proxy, etc., no admiten esta característica. Sin embargo, una tecnología llamada presharding es útil para esto.
Redis tiene dos tipos de partición. Supongamos que hay4ejemplos Redis R0, R1, R2, R3, y similares a user:1, user:2Esta representación de múltiples claves de usuarios, hay varias formas diferentes de elegir esta clave para almacenarla en un ejemplo Redis. Es decir, hay diferentes sistemas que mapean una clave a un servicio Redis.
La forma más simple de partición es la partición de rango, que es mapear un rango de objetos a un ejemplo Redis específico.
Por ejemplo, desde 0 hasta10Los usuarios con 000 se guardarán en el ejemplo R0, ID desde10001a 2Los usuarios con 0000 se guardarán en R1y así sucesivamente.
Este método es factible y se utiliza en la práctica, pero el inconveniente es que se necesita una tabla de mapeo de rango a ejemplo. Esta tabla debe ser administrada, y también se necesitan tablas de mapeo para varios objetos, lo que no es un buen método para Redis.
Otra forma de partición es la partición hash. Esto se aplica a cualquier clave, y no necesita ser de la forma object_name: como se describe a continuación:
Usar una función hash para convertir una clave en un número, por ejemplo, usar crc32 función hash. Ejecutar crc sobre la clave foobar32(foobar) producirá algo similar93024922entero.
Hacer módulo con este entero, convirtiéndolo a 0-3entre los números, se puede mapear este entero a4en un ejemplo de Redis.93024922 % 4 = 2, es decir, la clave foobar debe almacenarse en R2En los ejemplos. Nota: La operación de módulo es el residuo de la división, generalmente implementado con el operador % en varios lenguajes de programación.