日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Redis實(shí)現(xiàn)事物以及鎖的方法_Redis

作者:我是一棵卷心菜 ? 更新時(shí)間: 2022-09-19 編程語言

一、什么是Redis事物

Redis事務(wù)是一個(gè)單獨(dú)的隔離操作:事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會(huì)被其他客戶端發(fā)送來的命令請(qǐng)求所打斷。

作用:串聯(lián)多個(gè)命令防止別的命令插隊(duì)。

二、Redis 事務(wù)命令

下表列出了 redis 事務(wù)的相關(guān)命令:

注意:加入事務(wù)的命令暫時(shí)進(jìn)入到任務(wù)隊(duì)列中,并沒有立即執(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:

四、事物注意事項(xiàng)

指命令書寫格式有誤時(shí),整體事務(wù)中所有命令均不會(huì)執(zhí)行,包括那些語法正確的命令

指命令格式正確,但是無法正確的執(zhí)行時(shí),能夠正確運(yùn)行的命令會(huì)執(zhí)行,運(yùn)行錯(cuò)誤的命令不會(huì)被執(zhí)行且對(duì)應(yīng)的數(shù)據(jù)不會(huì)實(shí)現(xiàn)回滾。

五、事務(wù)三特性

單獨(dú)的隔離操作
事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會(huì)被其他客戶端發(fā)送來的命令請(qǐng)求所打斷。

沒有隔離級(jí)別的概念
隊(duì)列中的命令沒有提交之前都不會(huì)實(shí)際被執(zhí)行,因?yàn)槭聞?wù)提交前任何指令都不會(huì)被實(shí)際執(zhí)行

不保證原子性
事務(wù)中如果有一條命令執(zhí)行失敗,其后的命令仍然會(huì)被執(zhí)行,沒有回滾

六、分布式鎖

業(yè)務(wù)分析:雖然redis是單線程的,但是多個(gè)客戶端對(duì)同一數(shù)據(jù)同時(shí)進(jìn)行操作時(shí),如何避免不被同時(shí)修改?

解決方案:使用 expire 為鎖key添加時(shí)間限定,到時(shí)不釋放,則放棄鎖

命令行演示:

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"

通過這種方式,即使某個(gè)客戶端由于某種原因沒有手動(dòng)釋放鎖,也不會(huì)造成死鎖。因?yàn)樵O(shè)置了鎖lock_time的有效時(shí)間為20秒,當(dāng)20秒過后,其它的客戶端就可以拿到鎖、實(shí)施業(yè)務(wù)操作、釋放鎖了。

原文鏈接:https://blog.csdn.net/weixin_59654772/article/details/125707765

欄目分類
最近更新