經(jīng)常聽(tīng)開(kāi)發(fā)說(shuō)redis橙困,自己也只是知道是一個(gè)類似數(shù)據(jù)庫(kù)形式的存儲(chǔ)方式丹拯,一直沒(méi)有去了解redis到底是怎么工作的赶盔,今天跟同事聊到了redis相關(guān)的工作原理,收益匪淺,先來(lái)總結(jié)一下专筷。
redis是一個(gè)key-value的存儲(chǔ)系統(tǒng)弱贼,和memcatched類似,它支持存儲(chǔ)的value類型較多磷蛹,如string吮旅、List、Set弦聂、hash鸟辅、zset等,這些數(shù)據(jù)類型都支持莺葫,不想傳統(tǒng)數(shù)據(jù)庫(kù)會(huì)有存儲(chǔ)類型的限制int類型的只能輸入數(shù)字。
redis與其它關(guān)系型數(shù)據(jù)庫(kù)的不同枪眉,redis值的類型支持非常多不僅是字符串類型捺檬,還包括很多抽象類型,如不同無(wú)序或有序的列表贸铜、有序或無(wú)序集合間的交集或并集等高級(jí)服務(wù)器原子操作堡纬。
與memcached一樣redis為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中蒿秦,區(qū)別是redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或修改操作寫入追加的記錄文件烤镐,并且在此基礎(chǔ)上實(shí)現(xiàn)了主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步棍鳖,從服務(wù)器可以是關(guān)聯(lián)了其它從服務(wù)器的主服務(wù)器炮叶,使得redis可以執(zhí)行單層樹復(fù)制,存盤可以有意無(wú)意的進(jìn)行寫操作特幔,由于實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制竞阐,使得從數(shù)據(jù)庫(kù)在任意地方同步樹時(shí)喘沿,可以訂閱一個(gè)頻道并接收主服務(wù)器完整的消息發(fā)布記錄,同時(shí)對(duì)讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助侣肄。redis適用于定期執(zhí)行某些任務(wù),或者讀取的數(shù)據(jù)不會(huì)經(jīng)常發(fā)生變化的存儲(chǔ)醇份,它的速度非臣诠快,很大程度上提高了用戶的體驗(yàn)僚纷。