? ? ? ? ? ? ? ? ? ??nginx+redis實現(xiàn)session的共享
? ? ? ?負(fù)載均衡需要面臨的一個問題是內(nèi)存數(shù)據(jù)的同步。例如:我有A,B兩臺服務(wù)器做了負(fù)載均衡,當(dāng)我在A服務(wù)器上執(zhí)行了登錄并且將登錄數(shù)據(jù)存入session的時候,這些session數(shù)據(jù)只存在于A服務(wù)器上,而沒有在B服務(wù)器上,假如在處理下一個請求的時候,我需要用到session的數(shù)據(jù),而不巧的是,這個請求剛好被交由B服務(wù)器來處理,這時候就會出現(xiàn)B服務(wù)器拿不到session數(shù)據(jù)的情況,從而造成錯誤。
? ? ? ?這是一個無法避免的問題,有若干的解決方案,歸結(jié)起來都是要實現(xiàn)session等數(shù)據(jù)在各負(fù)載均衡分支中的同步,第一種想到的方案是把這些數(shù)據(jù)放在mysql等數(shù)據(jù)庫,也就是說存在磁盤,但是我們都知道session之所以出現(xiàn)是因為它是在內(nèi)存中的,程序讀取內(nèi)存的數(shù)據(jù)要遠(yuǎn)遠(yuǎn)比讀取磁盤的數(shù)據(jù)快,所以我們把一些經(jīng)常用到的東西都放在session里面。
? ? ? ?有沒有一種數(shù)據(jù)庫,是存放在內(nèi)存中的呢?這就是redis。通俗的講,它就是一個數(shù)據(jù)庫,但是這個數(shù)據(jù)庫是存在與內(nèi)存里面的,所以存取起來速度要比讀取磁盤的數(shù)據(jù)快得多。又因為它是一個數(shù)據(jù)庫,所以可以實現(xiàn)數(shù)據(jù)的同步。
? ? ? ?我們把session數(shù)據(jù)存放在redis中,然后所有的集群分支都可以去訪問這個數(shù)據(jù)庫里面的東西,這就是全局緩存的原理。