搜索

首页  >  问答  >  正文

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的数据了。

请问,是否有更合理的结构来解决这个问题。期待达人指教。

習慣沉默習慣沉默2765 天前711

全部回复(1)我来回复

  • 给我你的怀抱

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

    个人认为,用redis存储肯定不合理,但是是可行的。

    回复
    0
  • 取消回复