是什么
可以一次執(zhí)行多個(gè)命令,本質(zhì)上是一組命令的集合,一個(gè)事務(wù)中的所有命令都會(huì)序列化,按順序地串行化執(zhí)行而不會(huì)被其他命令插入,不許加塞
能干嘛
一個(gè)隊(duì)列中一次性,順序性,排他性的執(zhí)行一系列命令
Redis事務(wù)和數(shù)據(jù)庫事務(wù)對(duì)比
1.單獨(dú)的隔離操作:redis的事務(wù)僅僅是保證事務(wù)里的操作會(huì)被連續(xù)獨(dú)占的執(zhí)行,redis命令執(zhí)行是單線程架構(gòu),在執(zhí)行完事務(wù)內(nèi)所有指令前是不可能再去同時(shí)執(zhí)行其他客戶端的請(qǐng)求的
2.沒有隔離級(jí)別的概念:因?yàn)槭聞?wù)提交前任何指令都不會(huì)被實(shí)際執(zhí)行,也就不存在 事務(wù)內(nèi)的查詢要看到事務(wù)里的更新,事務(wù)外查詢不能看到 這種問題
3.不保證原子性:Redis的事務(wù)不保證原子性,也就是不保證所有指令同時(shí)成功或者同時(shí)失敗,只有決定是否開始執(zhí)行全部指令的能力,沒有執(zhí)行一半進(jìn)行回滾的能力
4.排他性: Redis會(huì)保證一個(gè)事務(wù)內(nèi)的命令依次執(zhí)行,而不會(huì)被其他命令插入
Redis常用命令:
discard; //取消事務(wù) 放棄執(zhí)行事務(wù)塊內(nèi)的所有命令
exec;//執(zhí)行所有事務(wù)塊內(nèi)的命令
mulit;//標(biāo)記一個(gè)事務(wù)塊的開始
unwatch;//取消watch命令對(duì)所有key的監(jiān)控
watch key [key ...] // 監(jiān)視一個(gè)或多個(gè)key,如果在事務(wù)執(zhí)行前這個(gè)key被其他命令所改動(dòng),那么事務(wù)將被打斷