標籤:基礎知識 設定檔 password 安全性 虛擬記憶體
Redis的進階應用程式實驗簡介
前面學習了Redis的基礎知識和基本命令,接下來繼續講解Redis的進階應用程式,包括:安全性設定,主從複製,交易處理, 持久化機制, 虛擬記憶體的使用。
一、安全性
設定在用戶端串連是需要指定的密碼(由於redis速度相當的快,一秒鐘可以150K次的密碼嘗試,所以需要設定一個密碼強度很大的密碼)。
設定密碼的方式有兩種:
(1) 使用config set 命令的requirepass 參數,具體格式為config set requirepass “password”。 (2) 配置redis.conf 中設定requirepass屬性,後面為密碼。
輸入認證的方式也有兩種:
(1) 登入時可以 redis-cli -a password
(2)登入後使用 auth password
(1)設定密碼
第一種密碼設定方式在上一個實驗中已經提到,(在CONFIG SET命令講解的執行個體),此處我們來看看第二種方式設定密碼。
首先需要進入Redis的安裝目錄,然後修改設定檔redis.conf。根據grep命令的結果,使用vi編輯器修改“# requirepass foobared” 為“requirepass test123”,然後儲存退出。
$ grep -n requirepass /etc/redis/redis.conf
$ sudo vim /etc/redis/redis.conf
(2)重啟redis-server 與redis-cli
重啟redis server
ervice redis-server restart
進入到redis-cli互動介面進行驗證
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/70/14/wKiom1Wwx9bjEzFOAADmWejra0k218.jpg" title="24.png" alt="wKiom1Wwx9bjEzFOAADmWejra0k218.jpg" />
結果表明第一次info命令失敗,在auth認證之後info命令正常返回。最後退出redis-cli。
另外一種密碼認證方式:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/70/11/wKioL1Wwyciwc15OAAOlRcfXtp4212.jpg" title="25.png" alt="wKioL1Wwyciwc15OAAOlRcfXtp4212.jpg" />
二、主從複製
由於環境的原因,在此處筆者大致講解主從複製的工作流程,不做實驗。
Redis的主從複製配置和使用都比較簡單,通過主從複製可以允許多個slave server擁有和master server相同的資料庫副本。
從伺服器只能讀,不能寫。
Redis主從複製特點:
1、master可以擁有多個slave。
2、多個slave可以串連同一個master外,還可以串連到其他的slave。(當master宕機後,相連的slave轉變為master)
3、主從複製不會阻塞master,再同步資料時,master可以繼續處理client請求。
4、提高了系統的延展性。
Redis主從複製的過程:
1、Slave與master建立串連,發送sync同步命令。
2、 Master會啟動一個後台進程,將資料庫快照集儲存到檔案中,同時Master主進程會開始收集新的寫命令並緩衝。
3、 後台完成儲存後,就將此檔案發送給Slave。
4、 Slave將此檔案儲存到磁碟上。
三、交易處理
Redis的交易處理比較簡單。只能保證client發起的事務中的命令可以連續的執行,而且不會插入其他的client命令,當一個client在串連中發出multi命令時,這個串連就進入一個事務的上下文,該串連後續的命令不會執行,而是存放到一個隊列中,當執行exec命令時,redis會順序的執行隊列中的所有命令。如果其中執行出現錯誤,執行正確的不會復原,不同於關係型資料庫的事務。
> multi
> set name a
> set name b
> exec
> get name
四、持久化機制
Redis是一個支援持久化的記憶體資料庫,Redis需要經常將記憶體中的資料同步到磁碟來保證持久化。
Redis支援兩種持久化方式:
1、snapshotting(快照),將資料存放到檔案裡,預設。
是將記憶體中的資料已快照的方式寫入到二進位檔案中,預設檔案dump.rdb,可以通過配置設定自動做快照持久化的方式。可配置Redis在n秒內如果超過m個key被修改就自動儲存快照。
save 900 1 #900秒內如果超過1個key被修改,則發起快照儲存
save 300 10 #300秒內如果超過10個key被修改,則快照儲存
2、 Append-only file(縮寫為aof),將讀寫操作存放到檔案中。
由於快照方式在一定間隔時間做一次,所以如果Redis意外down掉的話,就會丟失最後一次快照後的所有修改。
aof比快照方式有更好的持久化性,是由於使用aof時,redis會將每一個收到的寫命令都通過write函數寫入到檔案中當redis啟動時會通過重新執行檔案中儲存的寫命令來在記憶體中重建立立整個資料庫的內容。
由於os會在核心中緩衝write做的修改,所以可能不是立即寫到磁碟上,這樣aof方式的持久化也還是有可能會丟失一部分資料。可以通過設定檔告訴redis我們想要通過fsync函數強制os寫入到磁碟的時機。
設定檔中的可配置參數:
appendonly yes //啟用aof持久化方式
#appendfsync always //收到寫命令就立即寫入磁碟,最慢,但是保證了資料的完整持久化
appendfsync everysec //每秒中寫入磁碟一次,在效能和持久化方面做了很好的折中
#appendfsync no //完全依賴os,效能最好,持久化沒有保證
在redis-cli的命令中,SAVE命令是將資料寫入磁碟中。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/70/11/wKioL1WwyryAz8_GAAD8m4cI-sw885.jpg" title="3.png" alt="wKioL1WwyryAz8_GAAD8m4cI-sw885.jpg" />650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/70/14/wKiom1Wwx-2QbDd5AAHxdo_hLqo511.jpg" title="26.png" alt="wKiom1Wwx-2QbDd5AAHxdo_hLqo511.jpg" />
五、虛擬記憶體的使用
虛擬記憶體管理在2.6及之上版本取消了,在安裝實驗中,選擇的是2.8.9版本的redis ,所有實驗中的設定檔中沒有虛擬記憶體管理功能的配置選項。此處僅為講解
Redis的虛擬記憶體是暫時把不經常訪問的資料從記憶體交換到磁碟中,從而騰出記憶體空間用於其他的訪問資料,尤其對於redis這樣的記憶體資料庫,記憶體總是不夠用的。除了分隔到多個redis server外,提高資料庫的容量的方法就是使用虛擬記憶體,把那些不常訪問的資料交換到磁碟上。
通過配置vm相關的redis.config配置:
vm-enable yes #開啟vm功能
vm-swap-file /tmp/redis.swap #交換出來的value儲存的檔案路徑vm-max-memory 10000000 #redis使用的最大記憶體上線 vm-page-size 32 #每個頁面的大小32位元組
vm-pages 123217729 #最多使用多小個頁面
vm-max-threads 4 #用於執行value對象換入的背景工作執行緒數量
參考文檔
http://m.blog.csdn.net/blog/fengshizty/42936073#
Redis的進階應用程式