分佈式session我的理解淺談

  在分佈式中,用戶的session如何處理呢?數據庫

    服務器中的原生session是沒法知足需求的,由於用戶的請求有可能隨機落入到不一樣的服務器中,這樣的結果將會致使用戶的session丟失,傳統作法中有解決方案,是進行session同步,將一個服務器上的session進行同步到另外一個服務器上,在一個集羣中不管你訪問哪一個服務器均可以共享,可是這種方法有個明顯缺陷,就是性能問題,傳輸有時延問題,其次這樣每臺服務器的session重複擁有,這樣其內存必然受到影響,若是隻有幾臺服務器還好,若是是十臺,二十臺服務器呢?這種恐怖的場景會是什麼樣的體驗呢,我就沒法得知了。服務器

    那麼咱們應該如何有效的解決這樣的問題呢,咱們可使用傳說中的token來解決,簡單明瞭的說就是用戶每次登錄的時候生成一個相似sessionId的東西(也就是所謂的token,這將是全局的惟一標識,如UUID,做用相似於(jsessionid)),將其寫到cookie當中傳送給客戶端,客戶端對數據庫訪問過程當中不斷上傳這個token,而咱們服務端拿到這個token就能夠獲取用戶的在線信息,這個道理其實在不少地方是相通的,好比咱們容器中實現原生session,也是將生成的id寫入coolie當中。 cookie

   接下來我會來詳細介紹如何在登錄後實現分佈式sessionsession

   1,利用jdk中自帶的uuid生成器生成uuid用token來標記名稱,並寫入cookie經過response傳到客戶端裏,分佈式

  2。給token設置有效時間,這裏我給它設置了兩天性能

 

 3,在登錄的方法里加入cookieui

 

 

   4,經過@cookieValue來註解就能夠獲取到對應的token,可是須要注意一個問題,一些手機客戶端是沒用用到cookie來傳的,而是直接用參數來傳,那也不須要擔憂,@RequestParam註解同樣能夠獲取,須要給他們一個優先級,先判斷是否有參數後判斷是否cookie有值blog

   5,建立方法經過token獲取user信息,當用戶持續在線時,咱們能夠給他延遲時效。token

相關文章
相關標籤/搜索