新聞發(fā)布網(wǎng)站如果做初學(xué)seo網(wǎng)站推廣需要怎么做
事務(wù)的四個特性
Redis到底有沒有原子性
Redis中的原子性不同于MySQL,相比于MySQL,Redis中的原子性幾乎不值一提。
MySQL中的原子性,不僅僅是“要么全都執(zhí)行,要么全都不執(zhí)行”,它還保證了“一旦執(zhí)行,結(jié)果就必須是正確的”,如果不正確,就會進行回滾操作,保證不會出現(xiàn)錯誤的數(shù)據(jù)。
但Redis中的原子性,僅僅就是把多個操作打包在一起執(zhí)行,只是保證這些操作要么都不執(zhí)行,要么都執(zhí)行,并不保證結(jié)果是正確的。
Redis不具備一致性
Redis沒有約束,也沒有回滾機制,事務(wù)執(zhí)行過程中如果某個修改操作出現(xiàn)失敗,就可能引起不一致的情況。
Redis不具備持久性
Redis本身就是內(nèi)存數(shù)據(jù)庫,數(shù)據(jù)是存儲在內(nèi)存中的,雖然Redis也有持久化機制,但這個機制跟事務(wù)沒有半毛錢關(guān)系。
Redis不涉及隔離性
Redis是一個單線程模型的服務(wù)器程序,所有的請求/事務(wù),都是“串行”執(zhí)行的。
Redis中事務(wù)的意義
Redis中的事務(wù),主要的意義,就是為了“打包”,避免其他客戶端的命令插隊到中間
Redis中通過引入隊列來實現(xiàn)事務(wù)。開啟事務(wù)的時候,客戶端輸入的命令會發(fā)給服務(wù)器,并進入這個隊列中,而不是立即執(zhí)行。當(dāng)遇到“執(zhí)行事務(wù)”命令的時候,就會把隊列中的這些食物按照順序依次執(zhí)行。Redis主線程會把事務(wù)中的操作執(zhí)行完畢之后,再處理別的客戶端。
什么時候需要用到Redis的事務(wù)?
當(dāng)需要對多個操作進行打包執(zhí)行的時候(一般是為了防止線程安全問題),使用事務(wù)是比較合適的。