我有一個用戶表,一個類別表和一個用戶類別表,它們可以進行多對多的關係。 在redis中有這種結構的更好的形式是什麼?如何在關係數據庫中有多對多的關係
11
A
回答
27
使用Redis,關係通常由集合表示。一組可用於表示單向關係,因此您需要爲每個對象設置一組來表示多對多關係。
嘗試將關係數據庫模型與Redis數據結構進行比較是無用的。藉助Redis,所有內容都以非規範化的方式存儲。
例子:
# Here are my categories
> hmset category:1 name cinema ... more fields ...
> hmset category:2 name music ... more fields ...
> hmset category:3 name sports ... more fields ...
> hmset category:4 name nature ... more fields ...
# Here are my users
> hmset user:1 name Jack ... more fields ...
> hmset user:2 name John ... more fields ...
> hmset user:3 name Julia ... more fields ...
# Let's establish the many-to-many relationship
# Jack likes cinema and sports
# John likes music and nature
# Julia likes cinema, music and nature
# For each category, we keep a set of reference on the users
> sadd category:1:users 1 3
> sadd category:2:users 2 3
> sadd category:3:users 1
> sadd category:4:users 2 3
# For each user, we keep a set of reference on the categories
> sadd user:1:categories 1 3
> sadd user:2:categories 2 4
> sadd user:3:categories 1 2 4
一旦我們有了這個數據結構,很容易使用集代數它來查詢:
# Categories of Julia
> smembers user:3:categories
1) "1"
2) "2"
3) "4"
# Users interested by music
> smembers category:2:users
1) "2"
2) "3"
# Users interested by both music and cinema
> sinter category:1:users category:2:users
1) "3"
4
恕我直言,Redis不是用於製作結構化查詢(SQL),但是對於快速訪問數據,您可以做的是: 用user_id作爲關鍵字創建一個「表」,例如數據是與朋友的列表。然後你查詢user_id並處理你需要的東西。這與正常化相反。如果數據的順序是重要的,例如狀態更新,則所做的是將數據推入並彈出列表。例如,表「status」具有user_id作爲鍵,數據是一個列表。例如,你輸入數據然後查詢最後20個元素。
相關問題
- 1. 關係數據庫一對多關係
- 2. 「多對多」關係的同義詞(關係數據庫)
- 3. 如何在數據庫中建立多對多的關係?
- 4. 數據庫多對多關係
- 5. 多對多關係數據庫設計
- 6. 數據庫關係 - 多對多
- 7. 數據庫關係多對多
- 8. 關係數據庫,多對多
- 9. 如何設計對象數據庫中的多對多關係?
- 10. 替代使用關係數據庫中簡單數據的多對多關係
- 11. 關係有多對多關係
- 12. 如何爲此多對多關係設置關係數據庫表?
- 13. 一對多數據庫表的關係
- 14. Yii多數據庫關係
- 15. 關係數據庫設計:兩個1對多的關係
- 16. 如何在數據庫中實現一對多和多對多的關係
- 17. 何時或在數據庫中使用多對多關係?
- 18. 與關係的其他數據的多對多關係
- 19. 從多對多的數據庫關係中獲取數據
- 20. Grails - 多對象數據庫關係
- 21. 一對多數據庫關係
- 22. CodeIgniter - 一對多數據庫關係
- 23. 如何區分設計數據庫時的多對多關係?
- 24. 如何在一側實施有限數量關係的多對多關係? (MySQL)
- 25. 應該將多對多的數據關係視爲多對多關係嗎?
- 26. 數據庫插入在多對多的關係中.Dumb question
- 27. 多對多關係與一對多關係有什麼區別?
- 28. 在Ember數據中找到沒有關係的許多關係
- 29. Rails的數據庫關係has_many:通過但多對多的關係
- 30. Django - 涉及屬性關係的多對多關係的數據庫設計
謝謝!我是Redis的新手,這非常有趣:) – starikovs
我們如何得到類別名稱smembers類別:2:這樣的用戶,因爲它給出了類別編號 – vaibhav