搜尋

首頁  >  問答  >  主體

redis - 請問,有沒有可能純粹用reids實現登入功能?

考慮把使用者資料完全儲存在redis中而不是使用SQL類別資料庫是否可行。

第一個麻煩是當使用者輸出使用者名稱密碼的時候如何檢索。
使用keys指令是絕不可行的,太可怕了。

設想的結構如下:

每一个用户数据存储为一个hash类型:
key    user:info:unique-identification(int or uuid)
    hash-key-email:        hash-value-email
    hash-key-cellphone:    hash-value-cellphone
    hash-key-password:     hash-value-password
    hash-key-nickname:     hash-value-nickname
    hask-key-right01:      hash-value-right01
    ……

用hash类型存储email=>unique-identification检索数据
key    email:index
    hash-key-valueOfEmial:        hash-value-unique-identification

用hash类型存储cellphone=>unique-identification检索数据
key    cellphone:index
    hash-key-valueOfCellphone:        hash-value-unique-identification
  1. 判斷使用者輸入的是email還是cellphone

  2. #從對應的資料使用hget指令取得對應的unique-identification

  3. #如果hget獲得數據,則使用user:unique-identification作為key來取得使用者資料

  4. #比較password,如果驗證一致,建立對應的session、cookies,登入完成。

考慮會遇到的問題:
hget的回應時間是可以接受的,這個比keys指令進行檢索快了太多,還未考慮是否可以使用LUA一次存取完成登入驗證。
但是,資料儲存成為另一個不好解決的問題,如果300萬用戶的話,只是一個email=>unique-identification檢索資料就大約300M,如果是1000萬用戶,兩種檢索就大概2G的數據了。

請問,是否有更合理的結構來解決這個問題。期待達人指教。

習慣沉默習慣沉默2736 天前680

全部回覆(1)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-05-31 10:33:28

    個人認為,用redis儲存肯定不合理,但是是可行的。

    回覆
    0
  • 取消回覆