Redis使用總結之與Memcached異同

Redis是什麼?兩句話能夠作下歸納:
1. 是一個徹底開源免費的key-value內存數據庫
2. 一般被認爲是一個數據結構服務器,主要是由於其有着豐富的數據結構 strings、map、 list、sets、 sorted setsweb

 

Redis不是什麼?一樣從兩個方面來作下對比:
1. 不是sql server、mySQL等關係型數據庫,主要緣由是:
     . redis目前還只能做爲小數據量存儲(所有數據可以加載在內存中) ,海量數據存儲方面並非redis所擅長的領域
     . 設計、實現方法很不同.關係型數據庫經過表來存儲數據,經過SQL來查詢數據。而Redis通上述五種數據結構來存儲數據,經過命令 來查詢數據
2.   不是Memcached等緩存系統,主要緣由有如下幾個:
     .網絡IO模型方面:Memcached是多線程,分爲監聽線程、worker線程,引入鎖,帶來了性能損耗。Redis使用單線程的IO複用模型,將速度優點發揮到最大,也提供了較簡單的計算功能
     .內存管理方面:Memcached使用預分配的內存池的方式,帶來必定程度的空間浪費 而且在內存仍然有很大空間時,新的數據也可能會被剔除,而Redis使用現場申請內存的方式來存儲數據,不會剔除任何非臨時數據 Redis更適合做爲存儲而不是cache
     .數據的一致性方面:Memcached提供了cas命令來保證.而Redis提供了事務的功能,能夠保證一串 命令的原子性,中間不會被任何操做打斷
     . 存儲方式方面:Memcached只支持簡單的key-value存儲,不支持枚舉,不支持持久化和複製等功能 redis

   一句話小結一下:Redis是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部分場合能夠對關係數據庫起到很好的補充做用。sql

 

Redis有什麼用?只有瞭解了它有哪些特性,咱們在用的時候才能揚長避短,爲咱們所用:
1. 速度快:使用標準C寫,全部數據都在內存中完成,讀寫速度分別達到10萬/20萬
2. 持久化:對數據的更新採用Copy-on-write技術,能夠異步地保存到磁盤上,主要有兩種策略,一是根據時間,更新次數的快照(save 300 10 )二是基於語句追加方式(Append-only file,aof)
3. 自動操做:對不一樣數據類型的操做都是自動的,很安全
4. 快速的主--從複製,官方提供了一個數據,Slave在21秒即完成了對Amazon網站10G key set的複製。
5. Sharding技術: 很容易將數據分佈到多個Redis實例中,數據庫的擴展是個永恆的話題,在關係型數據庫中,主要是以添加硬件、以分區爲主要技術形式的縱向擴展解決了不少的應用場景,但隨着web2.0、移動互聯網、雲計算等應用的興起,這種擴展模式已經不太適合了,因此近年來,像採用主從配置、數據庫複製形式的,Sharding這種技術把負載分佈到多個特理節點上去的橫向擴展方式用處愈來愈多。數據庫

 

這裏對Redis數據庫作下小結:
1. 提升了DB的可擴展性,只須要將新加的數據放到新加的服務器上就能夠了
2. 提升了DB的可用性,隻影響到須要訪問的shard服務器上的數據的用戶
3. 提升了DB的可維護性,對系統的升級和配置能夠按shard一個個來搞,對服務產生的影響較小
4. 小的數據庫存的查詢壓力小,查詢更快,性能更好緩存

 

   寫到這裏,可能就會有人急不可待地想用它了,那怎麼用呢?能夠直接到官方文檔,裏面幫咱們整理好了各個語言環境下的客戶端,主要有Ruby、Python、 PHP、Perl、Lua、Java、C#....有幾種語言,我也沒見過,因此就很少說了,你懂的....安全

 

最後,把我使用過程當中的一些 經驗與教訓,作個小結:
1. 要進行Master-slave配置,出現服務故障時能夠支持切換。
2. 在master側禁用數據持久化,只需在slave上配置數據持久化。
3. 物理內存+虛擬內存不足,這個時候dump一直死着,時間久了機器掛掉。這個狀況就是災難!
4. 當Redis物理內存使用超過內存總容量的3/5時就會開始比較危險了,就開始作swap,內存碎片大
5. 當達到最大內存時,會清空帶有過時時間的key,即便key未到過時時間.
6. redis與DB同步寫的問題,先寫DB,後寫redis,由於寫內存基本上沒有問題 服務器

相關文章
相關標籤/搜索