日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

基于Redis实现分布式部署单点登录

發布時間:2025/3/21 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Redis实现分布式部署单点登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單點登錄的概念:

單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統

為什么會存在單點登錄的問題

  • session默認是存儲在當前服務器的內存中,如果是集群,那么只有登錄那臺機器的內存中才有這個session
  • 比如說我在A機器登錄,B機器是沒有這個session存在的,所以需要重新驗證

如何解決這個單點登錄問題

  • 不管在那一臺web服務器登錄,都會把token值存放到我們的一個集中管理的redis服務器中
  • 當客戶端攜帶token驗證的時候,會先從redis中獲取,再去redis中查詢是否有該用戶信息存在,如此實現單點登陸

為什么要使用redis 來解決session 共享問題呢?

  • redis 是一個純鍵值類型的NSQL數據庫,所有的操作都是具有原子性的.
  • redis 可以設置key的生存時間,訪問速度快速效率高.
  • 缺點就是: 會對代碼有一定的侵入性.需要自行編碼實現!!!

單點登錄的缺點及解決辦法:

引進SSO單點登錄的邏輯,它完美的解決了在多服務下的session共享問題,但是又會帶來哪些問題呢?

  • 在高并發下,很難保證生成的token的唯一性,并且有可能存在cookie存儲的token信息,在redis 中查詢不到,
  • 于是在這種情況下就需要使用分布式鎖!分布式鎖有很多實現方式, 利用redis 中的setnx 和getset命令來實現redis 分布式鎖!

    SETNX命令簡介 命令格式 SETNX key value 將 key 的值設為 value ,當且僅當 key 不存在。 若給定的 key 已經存在,則 SETNX 不做任何動作。 SETNX 是『SET if Not eXists』(如果不存在,則 SET)的簡寫。 返回值 設置成功,返回 1 。 設置失敗,返回 0

    現實舉例

    • 比如你寫的一個tornado項目,分別部署到A,B兩臺機器上
    • 如果直接使用session,那么如果在A機器登錄,token只會在A服務器的內存
    • 因為請求會分不到A,B兩個機器,如果這個請求到了B機器,B的內存中沒有就會讓重新登錄
    • 所以登錄A機器的時候我們應該把token值寫入到redis中,A/B機器登錄,都從redis中獲取token進行校驗

    單點登錄的原理:

    總結

    以上是生活随笔為你收集整理的基于Redis实现分布式部署单点登录的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。