redis是一個(gè)開(kāi)源的使用ansi?c語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、key-value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的api。
原子性
原子性是數(shù)據(jù)庫(kù)的事務(wù)中的特性。在數(shù)據(jù)庫(kù)事務(wù)的情景下,原子性指的是:一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。
對(duì)于redis而言,命令的原子性指的是:一個(gè)操作的不可以再分,操作要么執(zhí)行,要么不執(zhí)行。
Redis操作原子性的原因
Redis的操作之所以是原子性的,是因?yàn)镽edis是單線程的。
由于對(duì)操作系統(tǒng)相關(guān)的知識(shí)不是很熟悉,從上面這句話并不能真正理解Redis操作是原子性的原因,進(jìn)一步查閱進(jìn)程與線程的概念及其區(qū)別。
Redis在并發(fā)中的表現(xiàn)
Redis的API是原子性的操作,那么多個(gè)命令在并發(fā)中也是原子性的嗎?
對(duì)Redis來(lái)說(shuō),執(zhí)行g(shù)et、set以及eval等API,都是一個(gè)一個(gè)的任務(wù),這些任務(wù)都會(huì)由Redis的線程去負(fù)責(zé)執(zhí)行,任務(wù)要么執(zhí)行成功,要么執(zhí)行失敗,這就是Redis的命令是原子性的原因。
Redis本身提供的所有API都是原子操作,Redis中的事務(wù)其實(shí)是要保證批量操作的原子性。