Redis專題(一)
首先宣告一下Redis是什麼
介紹:(照搬百度百科的)
redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。 [1]
Redis支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。存檔可以有意無意的對資料進行寫操作。由於完全實現了釋出/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的訊息釋出記錄。同步對讀取操作的可擴充套件性和資料冗餘很有幫助。
我稍稍總結一下:
Redis就是一個非關係型的、基於記憶體儲存的、又支援持久化的高效能資料庫。
針對於這些特點:
請參照:https://blog.csdn.net/longxingzhiwen/article/details/53896702 我感覺講得很明白了。
上述連線部分節選:
Redis有些特殊,臨時性和永久性兼具。Redis首先把資料儲存在記憶體中,在滿足特定條件(預設是 15分鐘一次以上,5分鐘內10個以上,1分鐘內10000個以上的鍵發生變更)的時候將資料寫入到硬碟中,這樣既確保了記憶體中資料的處理速度,又可以通過寫入硬碟來保證資料的永久性,這種型別的資料庫特別適合處理陣列型別的資料。總結來說:
- 同時在記憶體和硬碟上儲存資料
- 可以進行非常快速的儲存和讀取處理
- 儲存在硬碟上的資料不會消失(可以恢復)
- 適合於處理陣列型別的資料
redis持久化方式:
分為兩種方式:rdb(redis database)和aof(append of file)
RDB:在指定時間間隔內,將記憶體中的資料作為一個快照檔案(snapshot)寫入到磁碟,讀取的時候也是直接讀取snapshot檔案到記憶體中-----------按照時間週期進行持久化操作!
①持久化過程:redis單獨建立(fork)一個程序來持久化,會先將資料寫入臨時檔案中,待上次持久化結束後,會將該臨時檔案替換上次持久化檔案,比aof高效,但是最後一次資料可能會丟失
②Fork:在linux中,fork()會產生一個跟主程序一樣的子程序,出於效率考慮,主程序和子程序會公用一段實體記憶體,當發生改變的時候,才會把主程序“”寫時複製”一份給子程序
③Redis備份的檔案:在redis.conf中設定,dbfilename預設為:dump.rdb
④rdb儲存策略:
- 900s 1 file change
- 300s 10file change
- 60s 10000file change
⑤Rdb的備份:
- config get dir 得到備份的資料夾
- 複製備份檔案
⑥Rdb恢復:
- 關閉redis
- 將備份檔案複製到工作目錄下
- 啟動redis,自動載入
AOF : 以日誌形式記錄每個寫操作,啟動時通過日誌恢復操作
- 開啟AOF:預設不開啟,進入redis.conf找到appendonly yes開啟
- 修復AOF:redis-check-aof –fix appendonly.aof
- 同步頻率:每秒記錄一次,如果宕機該秒記可能失效
- Rewrite:bgrewriteaof 因為日誌是追加方式,檔案會越來越大,當超過了設定的閾值時,日誌檔案會壓縮,保留僅可以恢復的日誌
RDB和AOF對比
(一) RDB優點:
- 節省磁碟空間
- 恢復速度快
(二) ROD缺點:
- 資料太大時,比較消耗效能
- 一段時間儲存一次快照,宕機時最後一次可能沒有儲存
(三) AOF優點:
- 備份機制更加穩健
- 可讀的日誌檔案,通過aof恢復更加穩健,可以處理失誤
(四) AOF缺點:
- 比RDB更佔磁碟
- 備份速度較慢
- 每次都同步日誌,有效能壓力
因此Redis的優點也就出來了:
- 資料庫沒有關聯關係,資料結構簡單,拓展表比較容易
- 讀取速度快,對較大資料處理快
既然有了優點自然也有其缺點:
- Redis的缺點是資料庫容量受到實體記憶體的限制,不能用作海量資料的高效能讀寫,因此Redis適合的場景主要侷限在較小資料量的高效能操作和運算上。
綜上所述Redis的應用場景就框定了出來:
首先對於傳統的資料庫專案而言,Redis可以改進的方面:
- 解決應用伺服器的cpu和記憶體壓力
- 減少io的讀操作,減輕io的壓力
- 關係型資料庫的擴充套件性不強,難以改變表結構
場景:
- 配合關係型資料庫做快取記憶體
- 快取高頻次訪問的資料,降低資料庫io
- 分散式架構,做session共享
- 可以持久化特定資料。
- 利用zset型別可以儲存排行榜
- 利用list的自然時間排序儲存最新n個數據
- 等等等等
引用:https://blog.csdn.net/u011277123/article/details/78692603/