標籤:
原文:http://segmentfault.com/q/1010000000316112
redis是什麼
redis就是一個儲存key-value索引值對的倉庫,如何使用redis在於如何理解你需要設計的系統的E-R的模型,然後合理的規劃redis的資料庫結構
情境
我舉一個簡單的訊息系統的例子,業務需求:伺服器端發送訊息給使用者
E-R模型:
1. 使用者(uid,nickname,phone,mood)
2. 訊息(mid,title,content,ts)
使用者和訊息之間是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的集合。每次訊息發送給指定的使用者時,只需要將訊息放到對應的集合裡即可
這樣就能表示出訊息系統對應的E-R模型了
總結
redis資料庫如何使用,關鍵自於你如何設計和理解你要做系統的E-R模型,搞清楚實體之間的關係,在redis裡設計相應的key-value索引值對即可。至於那幾種資料結構,對你設計redis資料庫來說作用不大,只是起到更方便的效果,用memcache一樣可以做到這些。
針對redis的提供的幾種資料結構,我建議別浮在表面只是會調個api,一點技術含量都沒有,建議去看一下源碼實現,推薦連結:http://redisbook.com/
redis資料庫設計(轉)