Redis安裝與配置筆記

redis是一個基於內存的高性能key-value數據庫。採用CS架構,支持多種數據結構。因爲是內存型數據庫,所以Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作。

 

Redis支持的數據類型

String

List

Set

ZSet

Hash

 

Redis持久化

Redis 提供了多種不同級別的持久化方式:

l  RDB 持久化可以在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)。

l  AOF 持久化記錄服務器執行的所有寫操作命令,並在服務器啓動時,通過重新執行這些命令來還原數據集。 AOF 文件中的命令全部以 Redis 協議的格式來保存,新命令會被追加到文件的末尾。 Redis 還可以在後臺對 AOF 文件進行重寫(rewrite),使得 AOF 文件的體積不會超出保存數據集狀態所需的實際大小。

l  Redis 還可以同時使用 AOF 持久化和 RDB 持久化。在這種情況下, 當 Redis 重啓時, 它會優先使用 AOF 文件來還原數據集, 因爲 AOF 文件保存的數據集通常比RDB 文件所保存的數據集更完整。

l  你甚至可以關閉持久化功能,讓數據只在服務器運行時存在。

l  瞭解 RDB 持久化和 AOF 持久化之間的異同是非常重要的, 以下幾個小節將詳細地介紹這這兩種持久化功能, 並對它們的相同和不同之處進行說明。

 

RDB 的優點

l  RDB 是一個非常緊湊(compact)的文件,它保存了 Redis 在某個時間點上的數據集。這種文件非常適合用於進行備份:比如說,你可以在最近的 24 小時內,每小時備份一次 RDB 文件,並且在每個月的每一天,也備份一個 RDB 文件。這樣的話,即使遇上問題,也可以隨時將數據集還原到不同的版本。

l  RDB 非常適用於災難恢復(disaster recovery):它只有一個文件,並且內容都非常緊湊,可以(在加密後)將它傳送到別的數據中心,或者亞馬遜 S3 中。

l  RDB 可以最大化 Redis 的性能:父進程在保存 RDB 文件時唯一要做的就是 fork 出一個子進程,然後這個子進程就會處理接下來的所有保存工作,父進程無須執行任何磁盤 I/O 操作。

l  RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。

 

RDB 的缺點

l  如果你需要儘量避免在服務器故障時丟失數據,那麼 RDB 不適合你。雖然 Redis 允許你設置不同的保存點(save point)來控制保存 RDB 文件的頻率,但是, 因爲RDB 文件需要保存整個數據集的狀態, 所以它並不是一個輕鬆的操作。 因此你可能會至少 5 分鐘才保存一次 RDB 文件。 在這種情況下, 一旦發生故障停機, 你就可能會丟失好幾分鐘的數據。

l  每次保存 RDB 的時候,Redis 都要 fork() 出一個子進程,並由子進程來進行實際的持久化工作。 在數據集比較龐大時,fork() 可能會非常耗時,造成服務器在某某毫秒內停止處理客戶端;如果數據集非常巨大,並且 CPU 時間非常緊張的話,那麼這種停止時間甚至可能會長達整整一秒。雖然 AOF 重寫也需要進行 fork() ,但無論 AOF 重寫的執行間隔有多長,數據的耐久性都不會有任何損失。

 

AOF 的優點

l  使用 AOF 持久化會讓 Redis 變得非常耐久(muchmore durable):你可以設置不同的 fsync 策略,比如無 fsync ,每秒鐘一次 fsync ,或者每次執行寫入命令時 fsync 。 AOF 的默認策略爲每秒鐘 fsync 一次,在這種配置下,Redis 仍然可以保持良好的性能,並且就算髮生故障停機,也最多隻會丟失一秒鐘的數據( fsync 會在後臺線程執行,所以主線程可以繼續努力地處理命令請求)。

l  AOF 文件是一個只進行追加操作的日誌文件(append only log),因此對 AOF 文件的寫入不需要進行 seek ,即使日誌因爲某些原因而包含了未寫入完整的命令(比如寫入時磁盤已滿,寫入中途停機,等等), redis-check-aof 工具也可以輕易地修復這種問題。

l  Redis 可以在 AOF 文件體積變得過大時,自動地在後臺對 AOF 進行重寫:重寫後的新 AOF 文件包含了恢復當前數據集所需的最小命令集合。整個重寫操作是絕對安全的,因爲 Redis 在創建新 AOF 文件的過程中,會繼續將命令追加到現有的 AOF 文件裏面,即使重寫過程中發生停機,現有的AOF 文件也不會丟失。而一旦新 AOF 文件創建完畢,Redis 就會從舊 AOF 文件切換到新 AOF 文件,並開始對新 AOF 文件進行追加操作。

l  AOF 文件有序地保存了對數據庫執行的所有寫入操作,這些寫入操作以 Redis 協議的格式保存,因此 AOF 文件的內容非常容易被人讀懂,對文件進行分析(parse)也很輕鬆。導出(export) AOF 文件也非常簡單:舉個例子, 如果你不小心執行了FLUSHALL 命令,但只要 AOF 文件未被重寫,那麼只要停止服務器,移除 AOF 文件末尾的 FLUSHALL 命令,並重啓 Redis ,就可以將數據集恢復到 FLUSHALL 執行之前的狀態。

 

AOF 的缺點

l  對於相同的數據集來說,AOF文件的體積通常要大於 RDB 文件的體積。

l  根據所使用的 fsync 策略,AOF 的速度可能會慢於 RDB 。 在一般情況下, 每秒 fsync 的性能依然非常高, 而關閉 fsync 可以讓 AOF 的速度和 RDB 一樣快, 即使在高負荷之下也是如此。 不過在處理巨大的寫入載入時,RDB 可以提供更有保證的最大延遲時間(latency)。

l  AOF 在過去曾經發生過這樣的 bug :因爲個別命令的原因,導致 AOF 文件在重新載入時,無法將數據集恢復成保存時的原樣。(舉個例子,阻塞命令 BRPOPLPUSH 就曾經引起過這樣的 bug 。)測試套件裏爲這種情況添加了測試:它們會自動生成隨機的、複雜的數據集,並通過重新載入這些數據來確保一切正常。雖然這種 bug 在 AOF 文件中並不常見,但是對比來說, RDB 幾乎是不可能出現這種 bug 的。

 

RDB 和 AOF ,我應該用哪一個?

一般來說,如果想達到足以媲美 PostgreSQL 的數據安全性,你應該同時使用兩種持久化功能。

如果你非常關心你的數據,但仍然可以承受數分鐘以內的數據丟失,那麼你可以只使用 RDB 持久化。

有很多用戶都只使用 AOF 持久化,但我們並不推薦這種方式:因爲定時生成 RDB 快照(snapshot)非常便於進行數據庫備份,並且 RDB 恢復數據集的速度也要比 AOF 恢復的速度要快,除此之外, 使用 RDB 還可以避免之前提到的AOF 程序的 bug 。

 

下載

Redis的官網是:http://redis.io/download

解壓tar –xvf redis.tar.gz

 

編譯

cd redis

make

make install

 

生成文件:

redis-server        redis服務啓動

redis-sentinel       監控管理

redis-cli            redis命令行

redis-check-aof      aof快速修復

redis-check-rdb      rdb快速修復

 

啓動方式

redis-server --port 6379

redis-server redis.conf

 

Redis連接方式

redis-cli –h <host> -p <port>

 

Redis配置文件常用配置

# 指定允許訪問的IP
bind 127.0.0.1

# 日誌文件
logfile redis.log

# redis最大可用內存
maxmemory <bytes>
<span style="white-space:pre">	</span>參數:
<span style="white-space:pre">	</span>1024mb
<span style="white-space:pre">	</span>1gb

# redis內存清除策略
maxmemory-policy <policy>
參數:
volatile-lru<span style="white-space:pre">			</span>對"過期集合"中的數據採取LRU(近期最少使用)算法
allkeys-lru<span style="white-space:pre">			</span>對所有的數據,採用LRU算法
volatile-random<span style="white-space:pre">			</span>對"過期集合"中的數據採取"隨即選取"算法
allkeys-random<span style="white-space:pre">			</span>對所有的數據,採取"隨機選取"算法
volatile-ttl<span style="white-space:pre">			</span>對"過期集合"中的數據採取TTL算法(最小存活時間),移除即將過期的數據
noeviction<span style="white-space:pre">			</span>不做任何干擾操作,直接返回OOM異常

# 開啓後redis會把所接收到的每一次寫操作請求都追加到appendonly.aof,,當redis 重新啓動時,會從該文件恢復出之前的狀態。
appendonly yes

# aof文件名字,默認爲appendonly.aof
appendfilename appendonly.aof

# rdb文件名字,默認爲dump.rdb
dbfilename dump.rdb


Redis常用命令

keys {key}  取出當前匹配的所有key

exists {key}  當前的key是否存在

del {key}   刪除當前key

rename    重命名key

 

更多命令:http://doc.redisfans.com/

發佈了36 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章