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性質中的a、c、i性質:
除此之外,當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...