English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le transazioni Redis possono eseguire più comandi in una volta e offrono tre garanzie importanti:
Le operazioni batch vengono messe in coda nella cache prima di inviare il comando EXEC.
Dopo aver ricevuto il comando EXEC, entra nell'esecuzione della transazione, se un comando nella transazione fallisce, gli altri comandi vengono comunque eseguiti.
Durante l'esecuzione della transazione, le richieste di comandi inviate da altri client non vengono inserite nella sequenza di esecuzione dei comandi della transazione.
Un'operazione transazionale attraversa tre fasi: da inizio a esecuzione.
Inizia la transazione.
Metti i comandi in coda.
Esegui la transazione.
Ecco un esempio di transazione, che prima di tutto MULTI Inizia una transazione, quindi metti in coda più comandi alla transazione, infine EXEC Un comando attiva una transazione, esegue tutti i comandi nella transazione insieme:
redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUED redis 127.0.0.1:6379> GET book-name QUEUED redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUED redis 127.0.0.1:6379> SMEMBERS tag QUEUED redis 127.0.0.1:6379> EXEC 1) OK 2) "Mastering C++ in 21 days" 3) (intero) 3 4) 1) "Mastering Series" 2) "C++" 3) "Programming"
L'esecuzione di un comando Redis singolo è atomica, ma Redis non ha aggiunto alcun meccanismo per mantenere l'atomicità nelle transazioni, quindi l'esecuzione delle transazioni Redis non è atomica.
Le transazioni possono essere considerate come uno script di esecuzione batch pacchettizzato, ma i comandi batch non sono operazioni atomiche; il fallimento di un comando in mezzo non causerebbe il rollback dei comandi eseguiti in precedenza né influenzerà i comandi successivi.
Questa è la spiegazione sul sito ufficiale Dal documento di Redis transazioni:
È importante notare che anche quando un comando fallisce, tutti gli altri comandi nella coda vengono elaborati - Redis non interrompe l'elaborazione dei comandi.
例如:
redis 127.0.0.1:7000> multi OK redis 127.0.0.1:7000> set a aaa QUEUED redis 127.0.0.1:7000> set b bbb QUEUED redis 127.0.0.1:7000> set c ccc QUEUED redis 127.0.0.1:7000> exec 1) OK 2) OK 3) OK
如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。
下表列出了 redis 事务的相关命令:
序号 | 命令及描述 |
---|---|
1 | DISCARD 取消事务,放弃执行事务块内的所有命令。 |
2 | EXEC 执行所有事务块内的命令。 |
3 | MULTI 标记一个事务块的开始。 |
4 | UNWATCH 取消 WATCH 命令对所有 key 的监视。 |
5 | WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |