Solución:
La fragmentación es casi la antítesis de la replicación, aunque son conceptos ortogonales y funcionan bien juntos.
La fragmentación, también conocida como partición, consiste en dividir los datos por clave; Mientras que la replicación, también conocida como duplicación, consiste en copiar todos los datos.
La fragmentación es útil para aumentar el rendimiento, reduciendo el impacto y la carga de memoria en cualquier recurso. La replicación es útil para obtener una alta disponibilidad de lecturas. Si lee de varias réplicas, también reducirá la tasa de aciertos en todos los recursos, pero el requisito de memoria para todos los recursos sigue siendo el mismo. Cabe señalar que, aunque puede escribir en un esclavo, la replicación es solo maestro-> esclavo. Por lo tanto, no puede escalar las escrituras de esta manera.
Suponga que tiene las siguientes tuplas: [1:Apple], [2:Banana], [3:Cherry], [4:Durian] y tenemos dos máquinas A y B. Con Sharding, podríamos almacenar las claves 2,4 en la máquina A; y las llaves 1,3 en la máquina B. Con Replicación, almacenamos las llaves 1,2,3,4 en la máquina A y 1,2,3,4 en la máquina B.
La fragmentación se implementa típicamente realizando un hash consistente sobre la clave. El ejemplo anterior se implementó con la siguiente función hash h (x) {return x% 2 == 0? A: B}.
Para combinar los conceptos, podríamos replicar cada fragmento. En los casos anteriores, todos los datos (2,4) de la máquina A podrían replicarse en la máquina C y todos los datos (1,3) de la máquina B podrían replicarse en la máquina D.
Cualquier almacén de clave-valor (del cual Redis es solo un ejemplo) admite la fragmentación, aunque ciertas funciones de clave cruzada ya no funcionarán. Redis admite la replicación lista para usar.
En palabras simples, la diferencia fundamental entre los dos conceptos es que la fragmentación se usa para escalar escrituras mientras que la replicación se usa para escalar lecturas. Como ya mencionó Alex, la replicación también es una de las soluciones para lograr HA.
Sí, ambos se suelen utilizar juntos si se tiene en cuenta cómo se pueden replicar los fragmentos en los nodos de un clúster.
Con respecto a su tercera pregunta, en lugar de la opción RAM-flush, es una mejor idea usar Redis Append Only File (AOF). Con solo un costo menor (en términos de velocidad de escritura), obtiene mucha más confiabilidad de sus escrituras. Es bastante parecido al registro binario de mysql. El 1 fsync / segundo es la opción recomendada para usar.