我有一個用戶表,一個類別表和一個用戶類別表,它們可以進行多對多的關係。 在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. Yii多數據庫關係
- 11. 關係數據庫設計:兩個1對多的關係
- 12. 與關係的其他數據的多對多關係
- 13. 從多對多的數據庫關係中獲取數據
- 14. Grails - 多對象數據庫關係
- 15. 一對多數據庫關係
- 16. 如何區分設計數據庫時的多對多關係?
- 17. 應該將多對多的數據關係視爲多對多關係嗎?
- 18. 如何在一側實施有限數量關係的多對多關係? (MySQL)
- 19. 數據庫插入在多對多的關係中.Dumb question
- 20. 與現有數據庫上的keystone創建多對多關係
- 21. iOS - 核心數據關係。映射表/多對多關係
- 22. 如何檢查是否存在關係 - 多對多關係
- 23. 多對多關係
- 24. 多對多關係
- 25. 多對多關係
- 26. 多對多關係
- 27. 多對多關係
- 28. 核心一對多關係到多對多關係的數據遷移
- 29. 在EF中刪除多對多關係中的選定關係?
- 30. 核心數據 - 從多對多關係
謝謝!我是Redis的新手,這非常有趣:) – starikovs
我們如何得到類別名稱smembers類別:2:這樣的用戶,因爲它給出了類別編號 – vaibhav