redis學習筆記

來源:互聯網
上載者:User

標籤:

Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API

 

redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value類型相對更多,包括string(字串)、list(鏈表)、set(集

合)、zset(sorted set --有序集合)和hash(雜湊類型)與memcached一樣,為了保證效率,資料都是緩衝在記憶體中。區別的是

redis會周期性的把更新的資料寫入磁碟或者把修改操作寫入追

加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步

 

Redis支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器

redis和memcached對處理並發請求都不存在效能瓶頸,效能瓶頸可能在網卡上

官方的bench-mark資料:結果:讀的速度是110000次/s,寫的速度是81000次/s 

 

安裝:yum -y install epel-release    yum -y install redis-3.0.7-2.el6.remi.x86_64.rpm  

設定檔: etc/redis.conf    vim /etc/redis.conf

 

如果是基於本地通訊,修改開啟 unixsocket /tmp/redis.sock檔案和它的許可權unixsocketperm 700可以提高效能

 

幾個參數介紹:

databases:指定支援多少個資料庫,在預設的叢集中(分布式情境中)只使用0號庫,不支援使用多個庫

tcp-keepalive 0    關閉tcp持久串連功能 

save 900 1    900秒中有一次資料的修改,將修改的資料同步到磁碟的資料檔案(持久化RDB)
save 300 10
save 60 10000   

可以注釋掉此功能

requirepass  設定用戶端串連後進行任何其他指定前需要使用的密碼   登陸後使用AUTH  password 完成認證 

 

登陸命令   redis-cli -h HOSTIP     例如:redis-cli -h 127.0.0.1或redis-cli

啟動服務:service redis start      

redis的命令擷取協助help

 

redis的持久化:

  RDB 持久化可以在指定的時間間隔內產生資料集的時間點快照(point-in-time snapshot)

  AOF 持久化記錄伺服器執行的所有寫操作命令,並在伺服器啟動時,通過重新執行這些命令來還原資料集

 

RDB 的優點:  父進程在儲存 RDB 檔案時唯一要做的就是 fork 出一個子進程,然後這個子進程就會處理接下來的所有儲存工作,父

進程無須執行任何磁碟 I/O 操作。RDB 在恢複大資料集時的速度比 AOF 的恢複速度要快,可以根據備份策略,將資料還原到不同的

時間點

 

RDB 的缺點:  Redis 都要 fork() 出一個子進程,並由子進程來進行實際的持久化工作。 在資料集比較龐大時, fork() 可能會非

常耗時,造成伺服器在某某毫秒內停止處理用戶端; 如果資料集非常巨大,並且 CPU 時間非常緊張的話,那麼這種停止時間甚至可能

會長達整整一秒。 雖然 AOF 重寫也需要進行 fork() ,但無論 AOF 重寫的執行間隔有多長,資料的耐久性都不會有任何損失,一旦發

生故障停機可能會丟失好幾分鐘的資料

 

AOF 的優點:   AOF 的預設策略為每秒鐘 fsync 一次,在這種配置下,Redis 仍然可以保持良好的效能,並且就算髮生故障停機,

也最多隻會丟失一秒鐘的資料,AOF 檔案是一個只進行追加操作的記錄檔(append only log), 因此對 AOF 檔案的寫入不需要進

行 seek , 即使日誌因為某些原因而包含了未寫入完整的命令(比如寫入時磁碟已滿,寫入中途停機,等等), redis-check-aof 工

具也可以輕易地修複這種問題,Redis 可以在 AOF 檔案體積變得過大時,自動地在後台對 AOF 進行重寫: 重寫後的新 AOF 檔案包

含了恢複當前資料集所需的最小命令集合。 整個重寫操作是絕對安全的,因為 Redis 在建立新 AOF 檔案的過程中,會繼續將命令追加

到現有的 AOF 檔案裡面,即使重寫過程中發生停機,現有的 AOF 檔案也不會丟失。 而一旦新 AOF 檔案建立完畢,Redis 就會從舊

AOF 檔案切換到新 AOF 檔案,並開始對新 AOF 檔案進行追加操作。AOF 檔案有序地儲存了對資料庫執行的所有寫入操作, 這些寫

入操作以 Redis 協議的格式儲存, 因此 AOF 檔案的內容非常容易被人讀懂, 對檔案進行分析(parse)也很輕鬆。 匯出(export)

AOF 檔案也非常簡單: 舉個例子, 如果你不小心執行了 FLUSHALL 命令, 但只要 AOF 檔案未被重寫, 那麼只要停止伺服器, 移

除 AOF 檔案末尾的 FLUSHALL 命令, 並重啟 Redis , 就可以將資料集恢複到 FLUSHALL 執行之前的狀態。

 

AOF 的缺點:對於相同的資料集來說,AOF 檔案的體積通常要大於 RDB 檔案的體積。根據所使用的 fsync 策略,AOF 的速度可能會

慢於 RDB 。 在一般情況下, 每秒 fsync 的效能依然非常高, 而關閉 fsync 可以讓 AOF 的速度和 RDB 一樣快, 即使在高負荷之下

也是如此。 不過在處理巨大的寫入載入時,RDB 可以提供更有保證的最大延遲時間(latency)。AOF 在過去曾經發生過這樣的 bug

: 因為個別命令的原因,導致 AOF 檔案在重新載入時,無法將資料集恢複成儲存時的原樣。 (舉個例子,阻塞命令 BRPOPLPUSH

就曾經引起過這樣的 bug 。) 測試套件裡為這種情況添加了測試: 它們會自動產生隨機的、複雜的資料集, 並通過重新載入這些數

據來確保一切正常。 雖然這種 bug 在 AOF 檔案中並不常見, 但是對比來說, RDB 幾乎是不可能出現這種 bug 的

 

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

  如果資料沒有安全性的要求。建議關閉持久化的功能,如果要求非常高建議都開啟,折中的辦法是開啟AOF

以上redis的持久化參考連結:http://my.oschina.net/davehe/blog/174662

 

  注意:持久本身不能取代備份;還應該制定備份策略,對redis資料庫定期進行備份

RDB與AOF同時啟用

  (1) BGSAVE和BGREWRITEAOF不會同時執行

    (2) 在Redis伺服器啟動用於恢複資料時,會優先使用AOF

 

在設定檔中將appendonly no的參數改為yes,就可以將AOF的持久化功能開啟,appendfilename 指定AOF檔案名稱

no-appendfsync-on-rewrite  在重寫AOF檔案時,是否對新寫的操作暫存在記憶體中,預設為no

auto-aof-rewrite-percentage   當前AOF檔案大小是上次重寫AOF檔案大小的兩倍時自動對當前AOF檔案重寫

auto-aof-rewrite-min-size     設定當前AOF檔案的大小至少要到指定大小才能進行重寫

 

複製:

  1). 同一個Master可以同步多個Slaves

  2). Slave同樣可以接受其它Slaves的串連和同步請求,這樣可以有效分載Master的同步壓力

  3). Master Server是以非阻塞的方式為Slaves提供服務。所以在Master-Slave同步期間,用戶端仍然可以提交查詢或修改請求

  4). Slave Server同樣是以非阻塞的方式完成資料同步。在同步期間,如果有用戶端提交查詢請求,Redis則返回同步之前的資料

 

複製的工作原理: 在Slave啟動並串連到Master之後,它將主動發送一個SYNC命令。此後Master將啟動後台存檔進程,同時收集所

有接收到的用於修改資料集的命令,在後台進程執行完畢後,Master將傳送整個資料庫檔案到Slave,以完成一次完全同步。而Slave

伺服器在接收到資料庫檔案資料之後將其存檔並載入到記憶體中。此後,Master繼續將所有已經收集到的修改命令,和新的修改命令依次

傳送給Slaves,Slave將在本次執行這些資料修改命令,從而達到最終的資料同步 如果Master和Slave之間的連結出現斷連現象,

Slave可以自動重連Master,但是在串連成功之後,一次完全同步將被自動執行。

  

將從庫的設定檔設定一條參數就可以了:slaveof 192.168.238.224 6379   指定主庫的ip地址,監聽的連接埠

登陸後使用info replication命令查看主從同步是否成功

 

 

從庫配置參數:slave-serve-stale-data  如果從庫串連不到主庫了,當有讀請求時是否發送自己的資料,預設為yes

       slave-read-only    從庫是否為唯讀,預設為yes

注意:如果master使用requirepass開啟了認證功能,從伺服器要使用masterauth <PASSWORD>來連入服務要求使用此密碼進行

認證

sentinel:用於監控和管理多個redis服務實現HA,通知,自動容錯移轉,要求sentinel要為基數個數,至少三個對master是否線上做

出投票式的正確判定,同時也避免了sentinel單點失效

 

啟動sentinel的程式  redis-sentinel /etc/redis-sentinel.conf

/etc/redis-sentinel.conf   為sentinel的專用設定檔

啟動sentinel的程式會實現以下過程

  (1) 伺服器自身初始化,運行redis-server中專用於sentinel功能的代碼

  (2) 初始化sentinel狀態,根據給定的設定檔,初始化監控的master伺服器列表

  (3) 建立連向master的串連

 

設定檔中必須配置的參數:

  sentinel monitor <master-name> <ip> <redis-port> <quorum>

  例如:sentinel monitor mymaster 127.0.0.1 6379 1     quorum是指定有幾台sentinel

 

  sentinel down-after-milliseconds <master-name> <milliseconds>

  例如:sentinel down-after-milliseconds mymaster 30000      30秒後串連不到主庫,則判定主庫為down

 

  sentinel parallel-syncs mymaster 1

  當從庫提升為主庫時,多少從庫可以同時過來同步

  sentinel failover-timeout mymaster 180000  

一定要把上面三個參數配置好再開啟sentinel,不然就麻煩了,無法自動容錯移轉

 

  容錯移轉逾時時間

  主觀下線:一個sentinel執行個體判斷出某節點下線

  客觀下線:多個sentinel節點協商後判斷出某節點下線

  

  專用命令:

    SENTINEL masters

    SENTINEL slaves <master name>

    SENTINEL get-master-addr-by-name <master name>

    

補充:當主庫宕機後,sentinel會把新的主庫ip地址通知用戶端(需要redis的專用用戶端程式),原來的主庫回來時會變成新主庫的從

庫,sentinel以非守護進程工作

 

redis學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.