Redis學習手冊12 流水線與事務

2021-10-07 03:01:10 字數 2073 閱讀 6068

redis的流水線特性:這個特性允許客戶端把任意多條redis命令請求打包在一起,然後一次性的全部傳送給伺服器,而伺服器則會在流水線包含的所有命令請求處理完畢之後,一次性的將它們的執行結果全部返回給客戶端。

通過使用流水線特性,我們可以將執行多條命令所需的網路通訊次數從 n

nn 次降低到 1 次,這可以大幅度減少程式在網路通訊方面耗費的時間,使得程式的執行效率得到顯著的提公升。

redis事務保障了多條命令執行的情況下,要麼全部執行成功,要麼全都不執行。

使用multi命令可以開啟redis事務支援。一般情況下除了少數阻塞命令外,redis命令總會立即執行,但是當開啟事務後,所有輸入的命令都不會立即執行,而是按順序放入乙個事務佇列中,等待事務執行時再統一執行。

127.0.0.1:6379> multi

ok127.0.0.1:6379> set test "hello world"

queued

queued

如上所示,伺服器在客戶端傳送的命令放入事務佇列之後,會返回乙個queued作為結果。

在使用multi命令開啟事務並將任意多個命令放入事務佇列之後,使用者就可以使用exec命令來執行事務了:

127.0.0.1:6379> multi

ok127.0.0.1:6379> set test "hello world"

queued

queued

127.0.0.1:6379> exec

1) ok

2) (integer) 3

當事務成功執行時,exec命令將返回乙個列表作為結果,這個列表會按照命令的入隊順序依次包含各個命令的執行結果。

如果使用者在開啟事務之後,不想執行事務了,則可以使用如下命令放棄事務:

discard

人們一般都會根據資料庫的acid性質的支援程度去判斷資料庫的事務是否安全。

具體來說,redis的事務總是具有acid性質中的aci性質:

除此之外,當redis伺服器執行在持久化模式之下時,redis的事務也具有acid中的d性質:

因為事務在執行時會獨佔伺服器,所以使用者應該避免在事務中執行過多命令,更不要將一些需要大量計算的命令放入事務中,以免造成伺服器阻塞。

客戶端可以通過執行watch命令,要求伺服器對乙個或多個資料庫鍵進行監視,如果在客戶端嘗試執行事務之前,這些鍵的值發生了變化,那麼伺服器將拒絕執行客戶端傳送的事務,並向它返回空值:

watch key [key ... ]

127.0.0.1:6379> watch msg

ok127.0.0.1:6379> get msg

"hello world"

127.0.0.1:6379> multi

ok127.0.0.1:6379> set user::1::email "[email protected]"

queued

127.0.0.1:6379> set msg "hello redis"

queued

127.0.0.1:6379> exec

(nil) -- msg鍵已被修改

使用unwatch命令可以取消對鍵的監視:

unwatch

redis裡的「流水線」pipeline pool

pipeline 流水線 定義 批量執行redis命令,減少通訊io,提高執行效率 注意 此為客戶端技術,而不是服務端技術 示例import redis 建立連線池並連線到redis pool redis.connectionpool host 127.0.0.1 db 0,port 6379 r ...

CPU設計學習 流水線

if instruction fetch,取指 id instruction decode,解碼 ex execute,執行 mem memory access,記憶體資料讀或者寫 wb write back,資料寫回到通用暫存器中 並不是所有指令都要經過這五個階段,例如運算指令在記憶體讀寫階段並沒...

jenkins流水線學習(groove)

一 建立專案 1 在建立專案型別時選擇流水線 pipeline 專案 2 在建立頁面的pipeline區域 型別預設是pipeline script 輸入框右上角有示例選擇,選擇其中乙個後,點選儲存。3 構建 這樣乙個簡單的流水線demo就完成了 一般我們型別選擇pipeline script fr...