2013-02-16 150 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。您希望在可靠的基於交易的系統中保存最重要的數據。