咱們一起來談談,redis爲什麼快?

      在程序媛的生涯中,設置緩存會想起它,控制併發會想到它,做一些壓縮存儲依舊會想到它,一直停留在知道的起點上,但是沒有深入的去挖掘和總結它這麼受歡迎的原因。近期天時地利人和,整理了一下它的點點滴滴。

☁  和Memcached一較高低

     記得前幾年,項目中比較常用的還是Memcached,存儲圖像、視頻,搭建集羣也是樣樣都行。但是隨着redis的發展,redis慢慢的融入到項目中,開始佔有一席之地。但是與成熟的Memcached並肩前行,redis雖然是新興的,但是Memcached依舊有redis不可替代的適用場景:

      第一個場景:存儲一些粒度比較小的靜態數據,比如一些html片段,Memcached便是我們更好的選擇。相對於redis而言,Memcached的元數據metadata更小些,所以相對來講對於數據存儲管理的性能更高,額外開銷更小。

     Memcached唯一支持的數據類型是String,所以更適合存儲只讀數據,因爲字符串並不會因爲額外的處理造成額外的開銷。畢竟Memcached每次更新一個對象時,都需要重複執行下面的操作:獲取整個字符串->反序列化爲對象->修改其中的值->再次序列化該對象->在緩存中將整個字符串替換爲新字符串。這樣一來,更新存儲數據就會有更高的消耗,可能就不是我們的最佳選擇了。      

      第二個場景:比redis更容易水平擴展。具體的擴展方式請參見:點擊打開鏈接

☁  Redis的優勢

✎  緩存管理:可以在必要時將無效的舊數據從內存中刪除,爲新數據騰出新的空間(過期的key的三種清理策略)。

✎  提供更大的靈活性:redis支持多種類型,並且採用key-value 的形式存儲,key和value的大小限制都是512Mb,與編碼無關,所以數據安全。但是memcached限制key最大爲250字節,value爲1MB,況且只支持String類型。Redis通過Hash來存儲一個對象的字段和值,並且可以通過單個key來管理它們(設置值,設置過期時間),而且我們可以很方便的通過Linux命令或者redis-cli完成對key的管理。

✎  redis提供主從複製:實現高可用的cache系統,支持集羣中多個服務器之間的數據同步。

✎  數據持久化:redis可以通過兩種方式將數據進行持久化,一定程度上規避緩存中的數據不穩定的問題,也可以在重啓服務器時最快的恢復緩存中所需的數據,提高了效率的同事減輕了主數據庫系統的開銷。

 ☁   Redis爲什麼會快?

✎  完全基於內存

      Redis是純內存數據庫,相對於讀寫磁盤,讀寫內存的速度就不是幾倍幾十倍了,一般,hash查找可以達到每秒百萬次的數量級。

✎  多路複用IO

      “多路”指的是多個網絡連接,“複用”指的是複用同一個線程。採用多路 I/O 複用技術可以讓單個線程高效的處理多個連接請求(儘量減少網絡IO的時間消耗)。可以直接理解爲:單線程的原子操作,避免上下文切換的時間和性能消耗;加上對內存中數據的處理速度,很自然的提高redis的吞吐量。

      對於Redis的內部實現和源碼設計還在進一步研究,有新的理解和心得會及時在這裏跟大家一起分享哦!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章