redis對比其余數據庫


  Redis屬於常見的NoSQL數據庫或者說非關系數據庫:Redis不使用表,她的數據庫也不會預定義或者強制去要求用戶對Redis存儲的不同數據進行關聯。

常見數據庫對比:    

      

和高性能鍵值緩存服務器memcached對比:

  Redis和mencached都可用於存儲鍵值映射,彼此性能也相差無幾,但是①.Redis能夠自動以兩種不同的方式將數據寫入硬盤進行持久化;②.Redis除了能存儲普通的字符串鍵外,還可以存儲其他四種數據結構,而memcached只能存儲普通的字符串鍵;③.Redis數據庫既可以用作主數據庫(primary database)使用,也可以作為其他存儲系統的輔助數據庫(auxiliary database)使用。

Redis附加特性:

  1.持久化方法:

  作為內存數據庫,服務器關閉后,存儲的數據何去何從?Redis擁有兩種不同形式的持久化方法,都可以用小而緊湊的格式將存儲在內存中的數據寫入硬盤:第一種持久化方法為時間點轉儲(point-in-time dump),轉儲操作既可以在“指定時間段內有指定數量的寫操作執行”這一條件被滿足時執行,又可以通過調用兩條轉儲到硬盤(dump-to-disk)命令中的任何一條來執行;第二種持久化方法見過有修改了數據庫的命令都寫入到一個只追加(append-only)文件里面,用戶可以根據數據的重要程度,將只追加寫入設置為從不同步(sync)、每秒同步一次或者每寫入一條命令就同步一次。

  2.避免集中式訪問:

  由於Redis的內存存儲設計,只使用一台Redis服務器可能沒辦法處理所有請求,因此為了擴展Redis的讀性能,並為redis提供故障轉移(failover)支持,Redis實現了主從復制特性:執行復制的從服務器會連上主服務器,接收主服務器發送的整個數據庫的初始副本(copy);之后主服務器執行的寫命令,都會發送給所有連接着的從服務器,從而實時更新從服務器的數據集,因此可以向任意一個從服務器發送讀請求,避免對主服務器的集中式訪問。

使用Redis的理由

  memcached數據庫,用戶只能用APPEND命令將數據添加到已有字符串的末尾。memcached的文檔中聲明,可以用APPEND命令來管理元素列表。用戶可以將元素追加到一個字符串的末尾,並將那個字符串當作列表來使用。對於如何刪除這些元素,memcached采用的辦法是通過黑名單(blacklist)來隱藏列表里面的元素,從而避免對元素執行讀取、更新、寫入(包括在一次數據庫查詢之后執行的memcached寫入)等操作。相反地,Redis的LIST和SET允許用戶直接添加或者刪除元素

  使用Redis而不是memcached來解決問題,不僅可以讓代碼變得更簡短、更易懂、更易維護,而且還可以使代碼的運行速度更快(因為用戶不需要通過讀取數據庫來更新數據)。除此之外,在其他許多情況下,Redis的效率和易用性也比關系數據庫要好得多。

  數據庫的一個常見用法是存儲長期的報告數據,並將這些報告數據用作固定時間范圍內的聚合數據(aggregates)。收集聚合數據的常見做法是:先將各個行插入一個報告表里面,之后再通過掃描這些行來收集聚合數據,並根據收集到的聚合數據來更新聚合表中已有的那些行。之所以使用插入行的方式來存儲,是因為對於大部分數據庫來說,插入行操作的執行速度非常快(插入行只會在硬盤文件末尾進行寫入)。不過,對表里面的行進行更新卻是一個速度相當慢的操作,因為這種更新除了會引起一次隨機讀(random read)之外,還可能會引起一次隨機寫(random write)。而在Redis里面,用戶可以直接使用原子的(atomic)INCR命令及其變種來計算聚合數據,並且因為Redis將數據存儲在內存里面,而且發送給Redis的命令請求並不需要經過典型的查詢分析器(parser)或者查詢優化器(optimizer)進行處理,所以對Redis存儲的數據執行隨機寫的速度總是非常迅速的。

  使用 Redis 而不是關系數據庫或者其他硬盤存儲數據庫,可以避免寫入不必要的臨時數據,也免去了對臨時數據進行掃描或者刪除的麻煩,並最終改善程序的性能。雖然上面列舉的都是一些簡單的例子,但它們很好地證明了“工具會極大地改變人們解決問題的方式”這一點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM