Redis基本的事務操作

事務

Redis單條命令式保證原子性的,但是事務不保證原子性

Redis事務本質:一組命令的集合,一個事務中的所有命令都會被序列化,在事務執行過程的中,會按照順序執行

  • 一次性:在隊列裏一次性執行
  • 順序性:按照隊列順序執行
  • 排他性:在執行的過程中是不允許干擾的

-------- 隊列 set set set 執行 -------- 

Redis事務沒有沒有隔離級別的概念
所有的命令在事務中,並沒有直接被執行,只有發起執行命令的時候纔會執行

redis的事務

  • 開啓事務(multi)
  • 命令入隊(......)
  • 執行事務(exec)  放棄事務(discard)

正常執行事務

127.0.0.1:6379> multi                   # 開啓事務
OK
127.0.0.1:6379> set k1 v1               # 命令入隊
QUEUED
127.0.0.1:6379> set k2 v2               # 命令入隊
QUEUED
127.0.0.1:6379> get k2                  # 命令入隊
QUEUED
127.0.0.1:6379> set k3 v3               # 命令入隊               
QUEUED
127.0.0.1:6379> exec                    # 執行事務
1) OK
2) OK
3) "v2"
4) OK

 放棄事務

127.0.0.1:6379> multi              # 開啓事務
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> discard            # 放棄事務
OK
127.0.0.1:6379> get k4             # 事務隊列中的命令都不會被執行
(nil)

編譯型異常(代碼有問題,命令有錯)

事務中所有的命令都不會被執行

127.0.0.1:6379> multi                                                    
OK
127.0.0.1:6379> set k1 v1                                        
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> getset k3                                                # 錯誤的命令
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> exec                                                     # 執行事務報錯
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k1                                                   # 所有的命令都不會被執行
(nil)

運行時異常( 1/0 )

如果事務隊列中存在語法性錯誤,那麼執行命令的時候,其他命令式可以正常執行的

127.0.0.1:6379> set k1 "v1"
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1                                       # 執行時會失敗
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> exec                                           
1) (error) ERR value is not an integer or out of range        # 雖然第一條命令報錯了,但是依舊執行成功了
2) OK
3) "v2"
127.0.0.1:6379> get k2
"v2"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章