學了這麼久的Redis,竟然還不知道事務

2021-10-05 03:01:04 字數 2664 閱讀 4345

redis支援事務嗎,有說支援的,有說半支援的,我這裡進行一波演示,看看到底支援不支援。在演示事務之前,首先要了解一下這幾個命令。

multi開啟事務

exec執行事務

discard取消事務

watch key [key ...]監視事務

unwatch取消監視事務

下面通過乙個轉賬的例子進行演示事務。

127.0.0.1:6379> multi

ok127.0.0.1:6379> set money 100

queued

127.0.0.1:6379> get money

queued

127.0.0.1:6379> exec

1) ok

2) "100"

這是乙個正常的事務問題,就是開啟了乙個事務,事務裡有一組資料,然後執行,這裡的每一條指令都是放到乙個佇列裡的,當執行的時候,會逐條執行。

下面演示乙個取消事務的

127.0.0.1:6379> multi

ok127.0.0.1:6379> set money 100

queued

127.0.0.1:6379> get money

queued

127.0.0.1:6379> discard

ok

這個也是正常的取消了

如果在我們執行事務的時候,出現了語法錯誤,那麼整個事務都不會被執行了

127.0.0.1:6379> multi

ok127.0.0.1:6379> set money 100

queued

127.0.0.1:6379> sett age 20

(error) err unknown command `sett`, with args beginning with: `age`, `20`,

127.0.0.1:6379> get money

queued

127.0.0.1:6379> exec

(error) execabort transaction discarded because of previous errors.

可以看出,當出現語法錯誤的時候,整個事務都不會被執行,還有一種錯誤,不是語法錯誤,而是執行時錯誤。

127.0.0.1:6379> multi

ok127.0.0.1:6379> set name "hzy"

queued

127.0.0.1:6379> incr name

queued

127.0.0.1:6379> get name

queued

127.0.0.1:6379> exec

1) ok

2) (error) err value is not an integer or out of range

3) "hzy"

我們讓乙個字串自增,出現了錯誤,但是事務的其他語句還是正常執行了(這應該就是別人說的redis是半支援事務吧)。

還有一種情況就是,當我們執行事務的時候,還未執行exec,然後有其他客戶端來干擾了。

127.0.0.1:6379> multi

ok127.0.0.1:6379> set money 100

queued

127.0.0.1:6379> incr money

queued

127.0.0.1:6379> exec

1) ok

2) (integer) 101

如果在執行exec之前,另乙個客戶端執行了如下操作

127.0.0.1:6379> set money 500

ok

然後客戶端1再執行exec,我們get一下

127.0.0.1:6379> get money

"101"

可以看出,這是事務執行完的結果,而那個500就沒有成功,為了解決這一問題,出現了鎖,用watch監視,也就是我們的樂觀鎖。

127.0.0.1:6379> watch money

ok127.0.0.1:6379> multi

ok127.0.0.1:6379> set money 100

queued

127.0.0.1:6379> incr money

queued

127.0.0.1:6379> exec

(nil)

127.0.0.1:6379> get money

"500"

這裡我們對money進行了監視,在執行exec之前我們在客戶端2執行如下

127.0.0.1:6379> set money 500

ok

然後再執行exec,由於對money進行了watch監視,所以就返回了nil。當我們再get money的時候,此時就是剛剛設定的500了,而事務相當於沒有執行。

這裡需要注意,當我們執行了exec、discard或unwatch的時候,都會自動的取消監視。

學了這麼久UI,你還不知道UI設計介面包含哪些?

那麼下面將會給大家介紹幾種最常見 最流行的移動端ui設計介面,並展示他們不同的設計特點,學以致用,開啟創意思維。常見的幾種ui設計介面 啟動頁 為了確保啟動頁在各個不同解析度的螢幕上適配良好,ui視覺設計師們常常會把它們放在螢幕的中間位置或者底部位置。首頁和選單欄介面 首頁的設計取決於產品的型別,它...

學習了這麼久遊戲建模,還不知道這些小精髓!

第一 學建模你得明白自己要的是什麼。成為乙個建模愛好者,需要具備什麼?熱情 時間 自制力 心態。這行沒你想的月入過萬,事實上和你說建模畢業月入過萬的都是耍流氓。建模行業,三個月到6個月轉正。工資可能會有5 6k。工資經驗兩年左右的,才可以到10k,還得看公司,普通小公司工資通常是開到8000左右。第...

小白上班這麼久遇到的一些坑

解決方法 每次都上調50px,就行。controls controls hidden hidden autoplay autoplay loop loop id play source src img yinyues everything.function audioautoplay id fals...