什么是Redis內存數據庫?
Redis,本質上上一個KEY-VALUE類型的內存數據庫,整個數據庫都加載在內存當中進行操作,定期通過異步操作把數據庫數據flush到硬盤上進行保存。因此它是純內存操作,Redis的性能非常出色,每秒可以處理超過10萬次讀寫操作。雖然是內存數據庫,但是其數據可以持久化,而且支持豐富的數據類型。
Redis支持保存LIST列表和SET集合的數據結構,而且還支持對LIST進行各種操作,例如從LIST兩端進行PUSH和POP數據,取LIST區間,排序等等。對SET支持各種集合的并集交集操作,單個value的最大限制是1GB。
Redis主要的缺點是受到物理內存限制,不能用作海量數據的高性能讀寫,而且它沒有原生的可擴展機制,不具有擴展能力,要依賴客戶端來實現分布式讀寫,因此其適合的應用場景主要局限在較小數據量的高性能操作和運算上。
最佳應用場景:適用于數據變化快且數據庫大小可遇見(內存大?。┑膽贸绦?。
例如:股票軟件、數據分析、實時數據收集、實時通訊。
Redis屬于NoSQL范疇內,其含義為:Not only SQL,是不僅僅是SQL,是一項新的技術,隨著WEB 2. 0的到來而得到廣泛應用。理念是運用非關系的數據存儲。
鍵值類型的數據庫主要使用哈希表,這個表中有一個特定的鍵和一個指針指向特定數據。KEY/VALUE模型對于IT系統來說的優勢在于簡單、容易部署。主要特點是具有極高的并發讀寫性能。
什么是持久化?
Redis的所有數據都保存在內存中,然后不定期的通過異步方式保存到磁盤上(這稱為半持久化);也可以把每一次數據變化都寫入到磁盤(這稱為全持久化)。所謂持久化就是將內存數據轉換為硬盤數據,內存模型到存儲模型的轉換,或者說是瞬時狀態與持久狀態的相互轉換。
Redis有兩種持久化方式,默認是snapshot方式,實現方法是定時將內存的快照持久化到硬盤,這種方式的缺點是持久化之后如果出現crash則會丟失一段數據。另外一種是aof方式,在寫入內存數據的同時將操作命令保存到日志文件中。
快照方式:
這種快照方式和虛擬機的快照一樣,保存某一時刻的完整數據。Redis在使用這種方式做持久化的時候,定期(默認5分鐘)會先寫入到一個臨時文件,寫入完成后,會用這個文件去替換上次的舊的文件。這種方式的好處是,任何一次的快照文件都是完整可用的。但是缺點是,它每隔一段時間(默認最快1分鐘,最慢15分鐘)做一次,所以會存在一段時間的數據丟失。
AOF方式:
這種方式就是把對Redis內存數據的的寫指令記錄下來,這些指令會被記錄在AOF文件的末尾,然后每秒做一次fsync操作(默認每秒一次),把指令在后臺在執行一次執行過程其實就是修改磁盤上的數據庫內容。所以如果出現故障也只丟失1秒的數據。
上面這種方式就很類似于傳統數據庫服務器的事務日志。
如果遇到在追加日志的時候遇到意外,可以使用redis-check-aof工具進行日志修復。
因為采用了追加方式,所以AOF會越來越大(這一點又和傳統數據庫不一樣,傳統數據庫事務日志文件都比較?。?,因此redis有另外一個機制就是AOF文件重寫,當AOF文件達到一個設定的閾值后,會自動啟動AOF文件壓縮,只保留可以恢復數據的最小指令集。
通過上面的對AOF的描述,可以看到AOF是一個面向過程的,而RDB是面向對象的。
AOF方式的有點:
丟失數據最小
AOF方式的缺點:
同等數據量,AOF文件比RDB文件體積大
AOF恢復速度比RDB方式慢
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。