閱讀目錄
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/