當(dāng)應(yīng)用程序以分布式方式部署并且具有多個(gè)服務(wù)時(shí),應(yīng)用服務(wù)器將無(wú)法提供原子操作。Redis具有高性能,而且是單線程的,因此它可以為原子操作提供一個(gè)場(chǎng)所。有了它,就可以實(shí)現(xiàn)分布式鎖。
Redis本身不處理分布式的東西,或者它的東西非常弱,因?yàn)镽edis本身是單線程的。redis經(jīng)常出現(xiàn)線程安全問(wèn)題的原因是應(yīng)用程序本身是分布式的。這種處理方法基本上是redis-Lua來(lái)解決分布式的安全問(wèn)題
如果你想“保證”數(shù)據(jù)的安全性,它會(huì)帶來(lái)開(kāi)銷的進(jìn)一步提高,這樣使用redis所帶來(lái)的性能優(yōu)勢(shì)就會(huì)喪失。正確的方法是區(qū)分不同的服務(wù),這樣在不需要“保證”數(shù)據(jù)一致性的情況下,就可以使用redis優(yōu)化。MySQL仍然在敏感場(chǎng)合使用。
分布式redis怎么保證數(shù)據(jù)一致性?例如:seckill、globalincrementalID、floorgeneration等。大多數(shù)解決方案都是基于數(shù)據(jù)庫(kù)的。Redis是單進(jìn)程單線程模式,它采用隊(duì)列模式將并發(fā)訪問(wèn)改為串行訪問(wèn),多客戶端連接到Redis之間不存在競(jìng)爭(zhēng)。其次,redis提供了setnx和GetSet命令,方便分布式鎖機(jī)制的實(shí)現(xiàn)。