在分布式和微服務等架構遍地開花的實踐中,Redis始終作為分布式緩存的首選,可謂經久不衰、獨樹一幟。Redis基于內存運行并支持持久化的NoSQL數據庫,是當前最熱門的NoSql數據庫之一,也被人們稱為數據結構服務器。

Java工程師

而為何要使用Redis呢?Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。Redis支持master-slave(主-從)模式應用。Redis支持數據持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。Redis單個value的最大限制是1GB,memcached只能保存1MB的數據。基于種種原因,Redis成為我們緩存架構的首選,而我在開啟碼農生涯時,就接觸到Redis,只是當時的使用比較簡單。

Java工程師

最開始時,因互聯網化團隊初建,各種所需要的中間件都需要自己搭建,包含Redis,而我們使用Docker搭建Redis集群,采用主從的Redis架構,再使用Sentinel(哨兵)模式來監控該Redis集群,使用也是通過Sentinel來使用。通過Spring或Spring Boot的哨兵連接方式連接Redis,注冊成Bean,然后使用序列化的Key-Value結構來緩存所需要的數據。而因領導的風格原因,我們也僅僅被允許采用Key-Value的基礎功能來進行Redis操作。至于其中的原因,也沒有深究。

Java工程師

而隨后,跳槽到現公司,其將Redis作為基礎服務進行封裝,而業務團隊僅通過加密串即可進行直接連接,其背后的可高用、主從分片、災備等均由基礎架構團隊負責。基礎架構團隊提供的操作方式,就不僅僅限于使用Key-Value的get、set、delete等方法,而幾乎完全提供了Redis的所有命令,包含inc、sadd等計數、集合操作。當然,有了這些,對程序員的要求更高,要在合適的場景中選擇恰當的命令進行操作,也不是一件容易的事。

Java工程師

或許,使用Redis有這樣那樣的原因,但在我看來,最重要的就兩條:其一,它能提高用戶的訪問速度,大量的降低系統響應的TP99;其二,它是主流,大家都在用,而且經過了時間的檢驗,抗住了一個又一個電商大促的業務場景。