2017-07-07 143 views
0


我醉了設計'評論&喜歡'! 我已經完成了mysql在stackoverflow中的幫助,但是當我嘗試爲它設計redis時,我再次感覺不好-_- |||評論與喜歡設計與Redis

的情況是:
當客戶端請求我與用戶信息的評論數據服務應該告訴客戶,如果用戶已經喜歡上了評論,好的,我有3個表:用戶,評論,像(包括user_id和comment_id) 我想從表'評論'中選擇評論,並使用'左連接'從表'Like'中查詢類似信息(使用user_id和comment_id)。這是解決方案爲MySQL。 我發現如果mysql數據庫中有很多評論和喜歡的話,查詢速度會很慢,所以我不得不使用Redis來優化它。但是在嘗試工作時我很困惑:
** 1。 **如果數據與用戶沒有關係,則很容易緩存數據,我的意思是每個用戶都會得到相同的數據,如文章,帖子。
** 2 **很難緩存數據,如果該數據與用戶的關係,我的意思是每個用戶都將獲得不同的數據,如「喜歡或不適合評論」

我的想法將每個Like信息緩存到redis,並在查詢到註釋後將其查詢出來,並將其設置爲comment.like.like.But問題是,如果我無法查詢redis中的類似信息,可能是由於崩潰導致redis,我應該嘗試從mysql再次加載嗎?如果是這樣,redis沒有任何意義,mysql會在重查詢中

回答

0

Like/no like與yes/no,true/false一樣,它們只是二進制信息。二進制信息可以很容易地記錄爲1/0。因此你應該考慮使用位圖來記錄這種類型的信息。

這是一個典型的Redis的位圖的使用,所以不是我的複製和粘貼來自博客的這些信息,我會向你介紹這就是Redis的官方文件中被提到一個:http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/

這是一個非常詳細技術博客並附帶代碼示例。我相信你會發現它很有用。

+0

我試圖使用位圖,但我發現位圖會花費很多內存。例如,如果我的應用程序中有1000000個用戶,並且只有一個用戶(user_id = 1000000)喜歡該評論,它會成本1000000/8 KB內存來保存1位數據,我認爲這是一個糟糕的方式 –

+0

我認爲計算是1000000/8/1024 KB,這是約120K每個評論。我認爲這是一個好處,而不是一個問題:1)大約120K是最多需要記錄1M用戶的喜歡; 2)當最後一個用戶喜歡它時,它只會達到這個尺寸; 3)你總是可以像計數一樣卸載「舊」到你的mysql數據庫。 –

+0

謝謝你的建議〜 –