在分布式和微服務(wù)等架構(gòu)遍地開(kāi)花的實(shí)踐中,Redis始終作為分布式緩存的首選,可謂經(jīng)久不衰、獨(dú)樹(shù)一幟。Redis基于內(nèi)存運(yùn)行并支持持久化的NoSQL數(shù)據(jù)庫(kù),是當(dāng)前最熱門(mén)的NoSql數(shù)據(jù)庫(kù)之一,也被人們稱(chēng)為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。

Java工程師

而為何要使用Redis呢?Redis不僅僅支持簡(jiǎn)單的k/v類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。Redis支持master-slave(主-從)模式應(yīng)用。Redis支持?jǐn)?shù)據(jù)持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用。Redis單個(gè)value的最大限制是1GB,memcached只能保存1MB的數(shù)據(jù)?;诜N種原因,Redis成為我們緩存架構(gòu)的首選,而我在開(kāi)啟碼農(nóng)生涯時(shí),就接觸到Redis,只是當(dāng)時(shí)的使用比較簡(jiǎn)單。

Java工程師

最開(kāi)始時(shí),因互聯(lián)網(wǎng)化團(tuán)隊(duì)初建,各種所需要的中間件都需要自己搭建,包含Redis,而我們使用Docker搭建Redis集群,采用主從的Redis架構(gòu),再使用Sentinel(哨兵)模式來(lái)監(jiān)控該Redis集群,使用也是通過(guò)Sentinel來(lái)使用。通過(guò)Spring或Spring Boot的哨兵連接方式連接Redis,注冊(cè)成Bean,然后使用序列化的Key-Value結(jié)構(gòu)來(lái)緩存所需要的數(shù)據(jù)。而因領(lǐng)導(dǎo)的風(fēng)格原因,我們也僅僅被允許采用Key-Value的基礎(chǔ)功能來(lái)進(jìn)行Redis操作。至于其中的原因,也沒(méi)有深究。

Java工程師

而隨后,跳槽到現(xiàn)公司,其將Redis作為基礎(chǔ)服務(wù)進(jìn)行封裝,而業(yè)務(wù)團(tuán)隊(duì)僅通過(guò)加密串即可進(jìn)行直接連接,其背后的可高用、主從分片、災(zāi)備等均由基礎(chǔ)架構(gòu)團(tuán)隊(duì)負(fù)責(zé)。基礎(chǔ)架構(gòu)團(tuán)隊(duì)提供的操作方式,就不僅僅限于使用Key-Value的get、set、delete等方法,而幾乎完全提供了Redis的所有命令,包含inc、sadd等計(jì)數(shù)、集合操作。當(dāng)然,有了這些,對(duì)程序員的要求更高,要在合適的場(chǎng)景中選擇恰當(dāng)?shù)拿钸M(jìn)行操作,也不是一件容易的事。

Java工程師

或許,使用Redis有這樣那樣的原因,但在我看來(lái),最重要的就兩條:其一,它能提高用戶(hù)的訪問(wèn)速度,大量的降低系統(tǒng)響應(yīng)的TP99;其二,它是主流,大家都在用,而且經(jīng)過(guò)了時(shí)間的檢驗(yàn),抗住了一個(gè)又一個(gè)電商大促的業(yè)務(wù)場(chǎng)景。