redis數據庫設計(轉)

原文:http://segmentfault.com/q/1010000000316112mysql

redis是什麼

redis就是一個存儲key-value鍵值對的倉庫,如何使用redis在於如何理解你須要設計的系統的E-R的模型,而後合理的規劃redis的數據庫結構redis

場景

我舉一個簡單的消息系統的例子,業務需求:服務器端發送消息給用戶
E-R模型:
1. 用戶(uid,nickname,phone,mood)
2. 消息(mid,title,content,ts)sql

用戶和消息之間是n:n的關係,一個消息能夠發給多個用戶,每一個用戶能夠擁有多個消息數據庫

redis數據庫設計

redis數據庫設計的關鍵在於key的設計,我通常採用固定前綴+惟一後綴的方式,例如:
1. 消息實體是兩層結構,考慮用redis的hash數據結構進行存儲(ps:用基本的string也是沒問題的),key爲msg_[$mid],mid相似於mysql表的主key,在當前redis數據庫要保證全局惟一,可以使用redis的incr原子操做實現,value能夠是array('title' => '標題', 'content' => '內容', 'ts' => '發佈時間戳').這樣,每次服務器端產生消息,構造這樣一個key-value的鍵值對便可表示消息自己的內容
2. 用戶實體,由於用戶的信息須要更穩定的持久化存儲,因此建議直接存儲在mysql裏,不須要進行遷移到redis中
3. 用戶-消息關係,能夠考慮redis的sets數據結構。key爲unread_mids_[$uid]和read_mids_[$uid],value爲mid的集合。每次消息發送給指定的用戶時,只須要將消息放到對應的集合裏便可segmentfault

這樣就能表示出消息系統對應的E-R模型了api

總結

redis數據庫如何使用,關鍵自於你如何設計和理解你要作系統的E-R模型,搞清楚實體之間的關係,在redis裏設計相應的key-value鍵值對便可。至於那幾種數據結構,對你設計redis數據庫來講做用不大,只是起到更方便的效果,用memcache同樣能夠作到這些。
針對redis的提供的幾種數據結構,我建議別浮在表面只是會調個api,一點技術含量都沒有,建議去看一下源碼實現,推薦連接:http://redisbook.com/服務器

相關文章
相關標籤/搜索