2013-02-16 149 views
3

我将我的旧的基于MySQL的用户管理系统的Redis,和 遇到了一些问题......Redis的用户管理系统

我使用HASHs和集的组合的基础系统。

恰在此时都有些伪代码

let uid=incr user_id_counter 

    hset [email protected] user user:uid 
    hset user:uid email joe#dom.com 
    hset user:uid gender m 
    hset user:uid year_of_birth 1972 
    hset user:uid fav_band acdc 
    sadd maleUsers uid 
    sadd born1972Users uid 

是很好,我可以用烧结 比如做搜索:

sinter maleUsers born1972 
or 
sinter femaleUsers born1980 

这是假设我让一个单独的一套用于每年的birh

sad bornXXXX uid 

这是我可以胃 - 但我会怎么处理喜欢乐队? 当然,我不会为所有可能的乐队制作一套乐曲吗?

最后,我想能够做到更精细的搜索,例如,

sinter maleUsers born1980 genreRock genreMetal homeTownSydney 

有没有一种更复杂的方式做关系查询?

回答

0

但是,我会如何处理喜爱乐队?当然,我不会为所有可能的乐队制作一套乐曲吗?

嗯,这正是你应该做的。使用Redis时,这种关系通过对带的引用,用户定义的一部分以及与包含对所有用户的引用的带关联的集来表示。

该关联必须手动保存,但您可以利用MULTI/EXEC块来保证并发环境中的数据一致性。

是否有更复杂的方式来进行关系查询?

是的,通过使用关系数据库而不是Redis。如果您正在寻找关系查询,为什么不使用RDBMS? MySQL有什么问题?

3

我是一个大粉丝或雷迪斯。但我担心你的做法是错误的。用户凭据的主存储器应该仍然是传统的RDBMS,坚持使用MySQL是一个很好的方法。

NoSQL数据库,特别是Redis,是为了做其他事情。

Redis是基于内存的。是的,你可以坚持一切硬盘驱动器,但是当你启动机器时,它会将硬盘上的所有内容加载到内存中。而且 - 您的存储上限是您机器的内存。因此,除非您指望用户不太多,否则我不会推荐Redis作为主要的存储来源。您仍然可以利用Redis对用户进行二级访问(例如二级缓存),但不能作为主要来源。

您可以使用基于磁盘的NoSQL数据库(MongoDB中,CouchDB的,卡桑德拉和所有)为您的用户数据库,这比Redis的一个更好的选择,但我仍然强烈建议这个传统的RDBMS。您希望在可靠的基于交易的系统中保存最重要的数据。