python redis事務 Redis 事務

2021-10-11 22:07:32 字數 1805 閱讀 4302

redis 事務

redis 事務可以一次執行多個命令, 並且帶有以下三個重要的保證:

批量操作在傳送 exec 命令前被放入佇列快取。

收到 exec 命令後進入事務執行,事務中任意命令執行失敗,其餘的命令依然被執行。

在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中。

乙個事務從開始到執行會經歷以下三個階段:

開始事務。

命令入隊。

執行事務。

例項以下是乙個事務的例子, 它先以 multi 開始乙個事務, 然後將多個命令入隊到事務中, 最後由 exec 命令觸發事務, 一併執行事務中的所有命令:

redis 127.0.0.1:6379> multi

okredis 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) (integer) 3

4) 1) "mastering series"

2) "c++"

3) "programming"

單個 redis 命令的執行是原子性的,但 redis 沒有在事務上增加任何維持原子性的機制,所以 redis 事務的執行並不是原子性的。

事務可以理解為乙個打包的批量執行指令碼,但批量指令並非原子化的操作,中間某條指令的失敗不會導致前面已做指令的回滾,也不會造成後續的指令不做。

這是官網上的說明 from redis docs on transactions:

it's important to note that even when a command fails, all the other commands in the queue are processed – redis will not stop the processing of commands.

比如:redis 127.0.0.1:7000> multi

okredis 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 事務命令

序號命令及描述

1discard

取消事務,放棄執行事務塊內的所有命令。

2exec

執行所有事務塊內的命令。

3multi

標記乙個事務塊的開始。

4unwatch

取消 watch 命令對所有 key 的監視。

5watch key [key ...]

監視乙個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷。

python redis用法詳解

使用python來操作redis用法詳解 1 redis連線 redis提供兩個類redis和strictredis用於實現redis的命令,strictredis用於實現大部分官方的命令,並使用官方的語法和命令,redis是strictredis的子類,用於向後相容舊版本的redis py。red...

python redis模組詳解

1 直接連線 import redis red redis.redis host localhost port 6379 db 1 2 連線池連線 連線池的原理是,通過預先建立多個連線,當進行redis操作時,直接獲取已經建立的連線進行操作,而且操作完成後,不會釋放,用於後續的其他redis操作,這...

Python Redis環境搭建

systemctl stop redis 停止服務 systemctl restart redis 重啟服務 systemctl enable redissystemctl start firewalld firewall cmd zone public add port 80 tcp perman...