2013-05-12 3 views
0

Existe-t-il une condition de concurrence possible avec le ltrim et le rpush de Redis?Redis ltrim - condition de course possible?

Par exemple, supposons que ma liste de Redis a ces articles: [1, 2, 3, 4, 5]

Et j'appelle ltrim list 4 -1 Cela devrait essentiellement slice la liste juste [5]

mais disons: une milliseconde après ltrim a commencé et avant ltrim est terminé, un autre thread pousse des éléments à la liste:

rpush list 6 
rpush list 7 

Lorsque les deux t il 2 rpushes, et les ltrims sont finis, la liste résultante sera-t-elle composée de [5, 6, 7]?

peut-il être juste [5]? En d'autres termes, y a-t-il une possibilité de condition de course où ltrim fait quelque chose comme créer une liste temporaire avec [5], et écrase [5,6,7] avec [5] après que les 2 rpushes soient terminés?

Répondre

4

Réponse courte: Non, car les commandes sont atomiques.

Honnête réponse: Je ne pense pas parce que je pense que les opérations sont atomiques; Cependant, le site ne mentionne pas explicitement qu'ils sont atomiques, donc je suis seulement 99.99999999% sûr qu'ils le sont.

Réponse logique: Redis est monothread, donc il n'y a pas d'autres threads qui pourraient anticiper la commande ltrim. Pour qu'une condition de concurrence se produise dans une application à un seul thread, elle doit sauter explicitement de l'opération ltrim avant que cela ne soit fait et commencer à faire autre chose, ce qui n'a pas beaucoup de sens.

Questions connexes