Redis 事務可以一次執行多個命令, 并且帶有以下兩個重要的保證:
- 事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。
- 事務是一個原子操作:事務中的命令要么全部被執行,要么全部都不執行。
一個事務從開始到執行會經歷以下三個階段:
- 開始事務。
- 命令入隊。
- 執行事務。
實例
以下是一個事務的例子, 它先以?MULTI?開始一個事務, 然后將多個命令入隊到事務中, 最后由?EXEC?命令觸發事務, 一并執行事務中的所有命令:
redis 127.0.0.1:6379> MULTI OKredis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUEDredis 127.0.0.1:6379> GET book-name QUEUEDredis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUEDredis 127.0.0.1:6379> SMEMBERS tag QUEUEDredis 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 事務的相關命令:
序號 | 命令及描述 |
---|---|
1 | DISCARD 取消事務,放棄執行事務塊內的所有命令。 |
2 | EXEC 執行所有事務塊內的命令。 |
3 | MULTI 標記一個事務塊的開始。 |
4 | UNWATCH 取消 WATCH 命令對所有 key 的監視。 |
5 | WATCH key [key ...] 監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷。 |
Redis 腳本
Redis 腳本使用 Lua 解釋器來執行腳本。 Reids 2.6 版本通過內嵌支持 Lua 環境。執行腳本的常用命令為?EVAL。
語法
Eval 命令的基本語法如下:
redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
實例
以下實例演示了 redis 腳本工作過程:
redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second1) "key1" 2) "key2" 3) "first" 4) "second"
Redis 腳本命令
下表列出了 redis 腳本常用命令:
序號 | 命令及描述 |
---|---|
1 | EVAL script numkeys key [key ...] arg [arg ...] 執行 Lua 腳本。 |
2 | EVALSHA sha1 numkeys key [key ...] arg [arg ...] 執行 Lua 腳本。 |
3 | SCRIPT EXISTS script [script ...] 查看指定的腳本是否已經被保存在緩存當中。 |
4 | SCRIPT FLUSH 從腳本緩存中移除所有腳本。 |
5 | SCRIPT KILL 殺死當前正在運行的 Lua 腳本。 |
6 | SCRIPT LOAD script 將腳本 script 添加到腳本緩存中,但并不立即執行這個腳本。 |