Redis大總結之二:Redis 事務,WATCH命令,生存時間
事務
Ø MULTI,EXEC操作:事務的開始和結束標記
n 執行Multi命令,redis反饋ok表示開始事務;執行EXEC命令,結束事務,開始順序執行事務中的操作。
127.0.0.1:6379[5]> MULTI OK 127.0.0.1:6379[5]> set k1 1 QUEUED 127.0.0.1:6379[5]> set k2 2 QUEUED 127.0.0.1:6379[5]> exec 1) OK 2) OK 127.0.0.1:6379[5]> get k1 "1" 127.0.0.1:6379[5]> get k2 "2" |
錯誤處理
Ø 語法錯誤:執行命令不存在或引數不對,都是語法錯誤,只有事務中有一處錯誤,redis執行exec命令後,會直接返回錯誤,正確的命令也不會被執行。
127.0.0.1:6379[5]> multi OK 127.0.0.1:6379[5]> set name zhangsan QUEUED 127.0.0.1:6379[5]> sss age 10 (error) ERR unknown command 'sss' 127.0.0.1:6379[5]> set sex nan QUEUED 127.0.0.1:6379[5]> exec (error) EXECABORT Transaction discarded because of previous errors. 127.0.0.1:6379[5]> get name (nil) 127.0.0.1:6379[5]> get sex (nil) |
Ø 執行錯誤:此類錯誤執行命令沒錯,但是操作對應的鍵有誤,會造成執行時才會發現的錯誤,但是不影響其它正確命令的執行。
127.0.0.1:6379[5]> multi OK 127.0.0.1:6379[5]> set k 10 QUEUED 127.0.0.1:6379[5]>sadd k 20//使用雜湊集合的命令操作strings型別資料 QUEUED 127.0.0.1:6379[5]> set k 100 QUEUED 127.0.0.1:6379[5]> exec 1) OK 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) OK 127.0.0.1:6379[5]> get k "100" |
WATCH命令
監控指定鍵,若被監控的鍵在以下事務執行前被修改,則包含對此鍵有操作動作的事務不執行,返回nil。
127.0.0.1:6379[5]> get k "20" 127.0.0.1:6379[5]> set k 30 OK 127.0.0.1:6379[5]>watch k OK 127.0.0.1:6379[5]> set k 40 OK 127.0.0.1:6379[5]> multi OK 127.0.0.1:6379[5]> set k 50 QUEUED 127.0.0.1:6379[5]> exec (nil) 127.0.0.1:6379[5]> get k "40" |
生存時間
Ø EXPIRE操作:設定一個鍵的生存時間,單位是秒,到時間後redis會自動刪除它。
127.0.0.1:6379[5]> set name zhangsan OK 127.0.0.1:6379[5]>expire name 10//生存時間為10s (integer) 1 127.0.0.1:6379[5]> ttl name (integer) 6 127.0.0.1:6379[5]> ttl name//TTL命令可以檢視剩餘的生存時間,剩餘秒數 (integer) 2 127.0.0.1:6379[5]> ttl name (integer) -2 127.0.0.1:6379[5]> get name (nil)//name鍵已被redis刪除 |
Ø PERSIST操作:撤銷鍵的生存時間,恢復為永久的鍵。
OK 127.0.0.1:6379[5]> set name lisi OK 127.0.0.1:6379[5]> expire name 10 (integer) 1 127.0.0.1:6379[5]>persist name (integer) 1 127.0.0.1:6379[5]> ttl name (integer) -1 127.0.0.1:6379[5]> get name "lisi" |
Ø PEXPIRE操作:設定一個鍵的生存時間,單位是毫秒,到時間後redis會自動刪除它。
127.0.0.1:6379[5]> pexpire name 10000 (integer) 1 127.0.0.1:6379[5]> pttl name // PTTL命令可以檢視剩餘的生存時間,剩餘毫秒數 (integer) 7139 127.0.0.1:6379[5]> pttl name (integer) 2760 127.0.0.1:6379[5]> pttl name (integer) -2 |
更多:
----------------------------完----------------------------------