Cómo garantizar la atomicidad en redis
La atomicidad es una característica de las transacciones de bases de datos. En el escenario de aplicación de transacciones de bases de datos, la atomicidad significa que todas las operaciones en la transacción se completan o no se completan por completo y no terminan en algún punto intermedio.
Con Redis, la atomicidad de los comandos significa que las operaciones no se subdividen; las operaciones se ejecutan o no;
Razones de la atomicidad de las operaciones de Redis:
Las operaciones de Redis son atómicas porque Redis tiene un solo subproceso.
Redis en concurrencia:
La API de Redis es atómica para las operaciones, entonces, ¿muchos comandos también son atómicos en concurrencia?
El código es el siguiente:
$redis= newRedis();
$redis->connect('127.0.0.1',6379);
for($i= 0;$iget('val');
$num++;
$redis->set('val',$num); p>
usleep(10000);
} Use dos terminales para ejecutar el programa anterior y descubra que el resultado de val es un valor menor que 2000. Entonces podrá saber que la ejecución de múltiples Redis Los comandos en el programa no son atómicos, que es el mismo que el comportamiento de las bases de datos ordinarias.
Si desea lograr atomicidad en el programa anterior, puede cambiar get y set a operaciones de instrucción única, como incr, o use transacciones de Redis. O use Redis + Lua para lograr este objetivo.
Para Redis, ejecutar API como get, set y eval es una tarea única. Estas tareas son responsables del hilo de Redis. y la tarea se ejecuta con éxito o no. La ejecución falla, razón por la cual los comandos de Redis son atómicos.
Todas las API proporcionadas por Redis son operaciones atómicas y las transacciones en Redis en realidad están diseñadas para garantizar la atomicidad. de operaciones por lotes
Para obtener más información sobre Redis, visite la sección del tutorial de uso de Redis
.