我正在将我的旧的基于MySQL的用户管理系统转换到Redis,并且遇到了一些问题……
我使用HASH和SET的组合作为系统的基础。
只是一些伪代码
let uid=incr user_id_counter
hset joe@dom.com 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进行搜索,例如:
sinter maleUsers born1972
or
sinter femaleUsers born1980这是假设我为每一年的birh做一个单独的集合。
sad bornXXXX uid这是我可以忍受的--但我该如何处理最受欢迎的乐队?当然,我不会为所有可能的乐队都做一套?
最终,我希望能够进行详细的搜索,例如,
sinter maleUsers born1980 genreRock genreMetal homeTownSydney有没有更复杂的方法来进行关系查询?
发布于 2013-02-16 19:07:55
我是Redis的铁杆粉丝。但我担心你的方法是完全错误的。用户凭证的主存储应该仍然是传统的关系型数据库管理系统,坚持使用MySQL是一个很好的方法。
NoSQL数据库,尤其是Redis,是用来做其他事情的。
Redis是基于内存的。是的,您可以将所有内容保存到硬盘驱动器中,但当您的机器启动时,它会加载从硬盘驱动器到内存的所有内容。你的存储空间就是你机器的内存。因此,除非你指望的用户不会太多,否则我不会推荐Redis作为主要的存储来源。您仍然可以利用Redis对您的用户进行二级访问(例如二级缓存),但不能将其作为主要来源。
您可以为您的用户数据库使用基于磁盘的NoSQL数据库(MongoDB、CouchDB、Cassandra和所有这些),这是比Redis更好的选择,但我仍然强烈推荐使用传统的关系型数据库。您希望将最关键的数据保存在基于事务的可靠系统中。
发布于 2013-02-16 18:13:07
但是我该如何处理fav呢?当然,我不会为所有可能的乐队都做一套?
嗯,这正是你应该做的。对于Redis,这种关系由对波段的引用表示,这是用户定义的一部分,并通过与包含对所有用户的引用的波段相关联的集合来表示。
这种关联必须手动保留,但您可以利用多个/EXEC块来保证并发环境中的数据一致性。
有没有更复杂的方法来进行关系查询?
是的,通过使用关系数据库而不是Redis。如果您正在寻找关系查询,为什么不使用RDBMS呢?MySQL有什么问题?
https://stackoverflow.com/questions/14906928
复制相似问题