工作中一旦遇到很多資料,高并發,這時就需要用到NoSQL來幫忙,NoSQL主要用到以下三種:Redis,Mongodb,Memcached。下面的表格介紹了他們之間的差別和使用場景。
對比項 | Redis | Mongodb | Memcached |
---|---|---|---|
資料存儲 | Redis的存儲格式和Memcache一樣,也是Key-Value模式,但是Redis有另外的實作,除了基本的string類型,redis還實作了hash,list,set,zset資料類型 | MongoDB的存儲格式是文檔類型,是一種類型json的格式,這樣有機會對某些字段建立索引,可以簡單的模仿一下關系型資料庫,而且MongoDB确實也有db,table的概念 | Memcache的存儲格式是Key-Value模式,但是很遺憾的是,Value的格式隻能是字元串,這也限制了Memcache的應用範圍 |
安全驗證 | Redis有權限驗證,不過是全局的 | Mongo的權限驗證類似RBAC,給不同的庫建立了不同的賬号,并配置設定賬号權限 | Memcache沒有自己的權限驗證,隻能通過防火牆等手段限制 |
資料有效期 | Redis可以給key添加過期時間 | MongoDB本身其實可以看作是一個資料倉庫了,不存在過去時間這一說 | Memcache也是可以設定過期時間的,這裡推薦使用時間戳來設定 |
資料持久化 | Redis本身支援兩種持久化,快照和AOF追加方式 | MongoDB先持久化journal再持久化data | Memcached,并沒有持久化功能,斷電就會丢失資料 |
特色功能 | 可執行Lua腳本 | 分片,索引(使用反向索引),可執行js腳本,單文檔事務(2PC) | Slab Allocation機制,申請大塊記憶體,分成各種大小的Chunk,大小相同的組成Slab Class |
使用場景 | 适用于對讀寫效率要求都很高,資料處理業務複雜和對安全性要求較高的系統 | 資料模型無法确定;QPS要求高;需要能快速水準擴充;弱事務 | 動态系統中減輕資料庫負載,提升性能;做緩存,适合多讀少寫,大資料量的情況 |