Redis實現(xiàn)事物以及鎖的方法
一、什么是Redis事物
Redis事務(wù)是一個單獨的隔離操作:事務(wù)中的所有命令都會序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命令請求所打斷。
作用:
串聯(lián)多個命令防止別的命令插隊。
二、Redis 事務(wù)命令
下表列出了 redis 事務(wù)的相關(guān)命令:
注意:加入事務(wù)的命令暫時進(jìn)入到任務(wù)隊列中,并沒有立即執(zhí)行,只有執(zhí)行exec命令才開始執(zhí)行
三、命令行演示
演示事物的開始、執(zhí)行
127.0.0.1:6379> MULTI OK 127.0.0.1:6379(TX)> set name cabbage QUEUED 127.0.0.1:6379(TX)> set age 20 QUEUED 127.0.0.1:6379(TX)> EXEC 1) OK 2) OK 127.0.0.1:6379> keys * 1) "name" 2) "age"
演示事物的開始與取消:
127.0.0.1:6379> MULTI OK 127.0.0.1:6379(TX)> set name cabbage QUEUED 127.0.0.1:6379(TX)> set age 20 QUEUED 127.0.0.1:6379(TX)> DISCARD OK 127.0.0.1:6379> keys * (empty array)
演示事物的watch:
四、事物注意事項
指命令書寫格式有誤時
,整體事務(wù)中所有命令均不會執(zhí)行,包括那些語法正確的命令
指命令格式正確,但是無法正確的執(zhí)行時
,能夠正確運行的命令會執(zhí)行,運行錯誤的命令不會被執(zhí)行且對應(yīng)的數(shù)據(jù)不會實現(xiàn)回滾。
五、事務(wù)三特性
單獨的隔離操作
事務(wù)中的所有命令都會序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命令請求所打斷。
沒有隔離級別的概念
隊列中的命令沒有提交之前都不會實際被執(zhí)行,因為事務(wù)提交前任何指令都不會被實際執(zhí)行
不保證原子性
事務(wù)中如果有一條命令執(zhí)行失敗,其后的命令仍然會被執(zhí)行,沒有回滾
六、分布式鎖
業(yè)務(wù)分析:
雖然redis是單線程的,但是多個客戶端對同一數(shù)據(jù)同時進(jìn)行操作時,如何避免不被同時修改?
解決方案:
使用 expire 為鎖key添加時間限定,到時不釋放,則放棄鎖
命令行演示:
127.0.0.1:6379> set name cabbage OK 127.0.0.1:6379> setnx lock_time 1 (integer) 1 127.0.0.1:6379> EXPIRE lock_time 20 (integer) 1 127.0.0.1:6379> get name "cabbage"
通過這種方式,即使某個客戶端由于某種原因沒有手動釋放鎖,也不會造成死鎖。因為設(shè)置了鎖lock_time
的有效時間為20秒,當(dāng)20秒過后,其它的客戶端就可以拿到鎖、實施業(yè)務(wù)操作、釋放鎖了。
到此這篇關(guān)于Redis實現(xiàn)事物以及鎖的方法的文章就介紹到這了,更多相關(guān)Redis 事物及鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS系統(tǒng)中Redis數(shù)據(jù)庫的安裝配置指南
Redis是一個基于主存存儲的數(shù)據(jù)庫,性能很強,這里我們就來看一下CentOS系統(tǒng)中Redis數(shù)據(jù)庫的安裝配置指南,包括將Redis作為系統(tǒng)服務(wù)運行的技巧等,需要的朋友可以參考下2016-06-06SpringSession通過Redis統(tǒng)計在線用戶數(shù)量的實現(xiàn)代碼
這篇文章主要介紹了SpringSession通過Redis統(tǒng)計在線用戶數(shù)量,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解
這篇文章主要介紹了Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解的相關(guān)資料,需要的朋友可以參考下2022-08-08redis發(fā)布訂閱_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了redis發(fā)布訂閱,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08Windows系統(tǒng)安裝Redis的詳細(xì)圖文教程
但有時候想在windows下折騰下Redis,那么就可以參考下面的方法了,雖然腳本之家小編以前整理了一些,發(fā)現(xiàn)這篇做的比較詳細(xì),下載也給出來了2018-08-08