1. 程式人生 > >Redis的高階應用

Redis的高階應用

1.安全性

設定客戶端連線後進行任何其他指定前需要使用的密碼

requirepass password

設定過密碼後,重啟一下redis就可以使用密碼

auth password  登入之後,可以執行此命令進行授權

-a password   在啟動redis時,加上該引數,也可進行授權

2.主從複製性

通過主從複製可以允許多個slave server擁有和master和server相同的資料庫副本

Redis主從複製的特點:

1.      master(主資料庫)可以有多個slave(從資料庫)

2.      多個salve可以連線到同一個master外,還可以連線到其他slave

3.      主從複製不會阻塞maste,在同步資料時,master可以繼續處理client請求

4.      提高系統伸縮性

Redis主從複製的過程:

1.      slave與master建立連線,傳送sync命令

2.      master會啟動一個後臺程序,將資料庫快照儲存到檔案中,同時master主程序會開始收集新的寫命令並快取

3.      後臺完成儲存後,就將此檔案傳送給salve

4.      Slave將此檔案儲存到硬碟上

配置主從伺服器:

配置salve伺服器很簡單,只需要在salve伺服器的redis配置檔案中加入以下配置

salveof ip 埠  #指定master的Ip和埠

masterauth password  #這是主機的密碼

注意:我們可以通過info命令可以得到主從的資訊

3.事務處理

Redis對事務的支援還比較簡單。Redis只能保證一個client發起的事務中的命令可以連續執行,中間不會插入其他client的命令。

1.當一個client在一個連線中發出multi命令時,這個連線會進入一個事務上下文,該連線後續的命令不會立即執行(返回值是QUEUED),而是放到一個佇列中,當執行exec命令時,redis會順序的執行佇列中的所有命令

2. 當一個client在一個連線中發出multi命令時,這個連線會進入一個事務上下文, 該連線後續的命令不會立即執行(返回值是QUEUED),而是放到一個佇列中,當執行discard命令時,redis就會清空事務的命令佇列並退出事務上下文,也就是我們所說的回滾

注意:有事務執行時,事務中的其中一個命令執行失敗,整個事務不會回滾

樂觀鎖複雜事務控制

樂觀鎖:大多數是基於資料版本(version)的記錄機制實現的。即為資料增加一個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表新增一個version欄位來實現讀取出資料時,將此版本號一同讀出,之後更新時,對此版本號加1。此時,將提交資料的版本號與資料庫表對應記錄的當前版本號進行比對,如果提交的資料版本號大於資料庫當前版本,則予以更新,否則認為是過期資料。

樂觀鎖的使用:

Watch命令會監視給定的key,當exec時,如果監視的key從呼叫watch後發生過變化,則整個事務會失敗。也可以呼叫watch多次監視多個key,這樣就可以對指定的key加樂觀鎖。注意:watch的key是對整個連線有效的,事務也一樣。如果連線斷開,監視和事務都會被自動清除。當然了exec,discard中的樂觀鎖,unwatch命令都會清除連線中的所有監視

4.持久化機制

Redis是一個支援持久化的記憶體資料庫,也就是說redis需要經常將記憶體中的資料同步到硬碟來保證持久化

Redis支援兩種持久化方式:

1.  snapshotting(快照) 也是預設方式

a)        快照儲存時預設的持久化方式。這種方式是將記憶體中資料以快照的方式寫入到二進位制檔案中,預設的檔名為dump.rpb。可以通過redis的配置檔案設定自動做快照持久化的方式。

b)        命令:save 秒被修改的key的個數

(意義:redis在多少秒內如果超過多少個key被修改就自動做快照)

注意: 由於快照方式是在一定時間間隔做一次的,所以如果redis意外down掉的話,就會丟失最後一次快照後的所有修改。

2.  Append-only file(縮寫aof的方式)

a)        aof比快照方式有更好的持久化性,是由於在使用aof時,redis會將每一個收到的寫命令都通過write函式追加到檔案中,當redis重啟時會通過重新執行檔案中儲存的寫命令來在記憶體中重建整個資料庫的內容,預設檔名:appendonly.aof

b)        aof的使用(通過配置redis的配置檔案):

1.appendonly yes       //啟用aof持久化方式

2.appendfsyncalways   //收到命令就立即寫入磁碟,效能最差,但是保證完全的持久化

appendfsynceverysec  //每秒鐘寫入磁碟一次,在效能和持久化方面做了很好的折中

appendfsyncno       //完全依賴於os。效能最好,持久化沒保證

注意:快照方式儲存的檔案內容是資料 aof方式儲存的內容是命令

5.釋出及訂閱訊息

釋出訂閱(pub/sub)是一種訊息通訊模式,主要的目的是解除訊息釋出者和訊息訂閱者之間的耦合,redis作為一個pub/sub的server,在訂閱者和釋出者之間起到了訊息路由的功能。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱自己感興趣的訊息型別,redis將資訊型別稱為通道(channel)。當釋出者通過publish命令向redis server傳送特定型別的資訊時,訂閱該資訊型別的全部client(客戶端)都會收到此訊息

訂閱訊息: subscribe 訊息型別(與釋出訊息時的訊息型別相同)

釋出訊息: psubscribe 訊息型別(自定義) 訊息內容(自定義)

6.虛擬記憶體的使用

Redis的虛擬記憶體與作業系統的虛擬記憶體不是一回事,但是思路和目的都是相同的。就是暫時把不經常訪問的資料從記憶體交換到磁碟中,從而騰出寶貴的記憶體空間用於其他需要的訪問的資料。尤其是對於redis這樣的記憶體資料庫,記憶體總是不夠用的。除了可以將資料分割到多個redis server外。另外能夠提高資料庫容量的辦法就是使用虛擬記憶體把那些不經常訪問的資料交換到磁碟上

虛擬記憶體的使用(需要配置redis的配置檔案):

vm-enabled yes              //開啟vm功能

vm-swap-file                 //交換出來的value儲存的檔案路徑

vm-max-memory 100   // redis使用的最大記憶體上限

vm-page-size 32        //每個頁面的大小32位元組

vm-pages 134217728    //最多使用多少個頁面

vm-max-threads 4              //用於執行value物件的工作執行緒數量

注意:當在redis配置檔案中將上述配置設定之後。

重啟redis的時候,會出現是否要使用redis的虛擬記憶體的提示?

提示下面有really-use-vm yes,如果真的要使用redis的虛擬記憶體

則需要將這句話寫在redis的配置檔案vm-enabled yes下面,即可