Redis之--高級應用

1.安全性redis

因爲redis的運行速度很是快(每秒能夠嘗試150k數據容量的密碼破解),所以,爲了提升其安全性,在進入客戶端的設置密碼是很是有必要的。數據庫

具體操做:打開redis.conf文件,ctrl+f查找"requirepass",結果下圖:設置對應的密碼便可;緩存

使用:重啓redis,進入客戶端(redis-cli),發現能夠進入,可是當操做命令的時候,發現報錯:(error)ERR operation not permitted;輸入受權命令:auth 剛剛設置的密碼值;返回OK,表示受權成功;安全

上面操做的缺點是,每次進入客服端的時候都須要輸入密碼;能夠在進入客戶端就輸入密碼,避免了之後的重複輸入:redis0-cli -a 剛剛設置的密碼值;服務器

 

2.主從複製:app

經過主從複製可使多個從服務器(slave server)擁有和主服務器(master server)相同的數據庫副本。函數

具體操做:打開從服務器的redis.conf文件,ctrl+f查找"slaveof",結果以下圖:性能

設置:slaveof 主服務器ip  主機端口號 便可;測試

若是主服務設置了密碼,還要再添加以下配置:ui

設置:masterauth 主服務器密碼;

可使用info命令查看相關的信息。

 

3.事務處理

   redis只能保證一個client發起的事務的命令能夠連續的執行,而中間不會插入其它的cli命令;

   當在一個client在一個鏈接中發出multi命令時,這個鏈接會進入一個事務上下文,該鏈接的手續命令不會當即執行,而是先放到一個隊列中,當執行exec命令時,redi會順序執行全部的命令。

  使用以下圖:

取消事務處理:可使用discard命令;discard就是取消當前隊列中全部的命令並退出事務上下文,也就是事務回滾。

說明:redis的事務機制還很原始;它只能讓隊列中全部的命令都執行,可是當其中一個命令執行失敗的時候,不會讓整個事務中全部的命令都回滾。(redis的事務須要改進)

 

補充:

樂觀鎖:大多數是基於數據庫版本(version)實現的。即爲數據庫增長一個版本標識,在基於數據庫表示的版本解決方案中,通常經過爲數據庫表添加一個表示版本的"version"字段,將此版本一同讀出,當更新版本的時候,此版本號加1;此時,將提交到數據庫的版本號通數據庫中的版本號進行對比,若是提交的版本號大於數據庫中的版本號,則予以更新;不然認爲過時。(相似於版本控制器)

redis的樂觀鎖:使用watch命令。

 

4.持久化機制

redis是一個支持持久化的內存數據庫,也就是說redis須要常常講內存中的數據同步到硬盤來保證持久化;redis支持兩種持久化方式:snapshotting(快照)和Append-only file(aof)。

a.snapshotting方式

   也稱快照方式,也是默認方式;這種方式將內存中的數據以快照的方式寫入二進制文件中,默認的文件名爲dump.rdb。能夠經過配置設置自動作快照持久方式。

例如:配置redis在n秒內若是超過m個key被修改了,就發起快照。

 save 300 10 #300秒內超過10個key被修改就發起快照

b.Append-only file方式

  因爲快照方式是在必定間隔作一次的,因此若是redis意外down掉的話,就會丟失最後一次快照後的全部修改。

  aof方式比快照有更好的持久化性,是因爲在使用aof時,redis會將每個收到的命令都經過write函數追加到文件中,當redis重啓是會經過從新執行文件中保存的鞋命令來在內存中創建整個的數據庫。

 因爲OS在內核中緩存write作的修改,因此可能不是當即寫到磁盤上。這樣持久化也仍是有可能丟失部分文件;能夠經過配置文件告訴redis咱們想要經過fsync(同步)函數強制os寫入到磁盤的時機。

具體操做:打開從服務器的redis.conf文件,ctrl+f查找"appendonly",結果以下圖:

      appendonly yes //啓用aof持久化方式

而後設置同步方式:

     #appendfsync always //收到命令就當即寫入,最慢,可是保證了徹底的持久化

     #appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面作了了很好的折中

     #appendfsync no //徹底依賴os,性能最好,持久化沒保證

開啓其中一種便可。

 

5.發佈與訂閱信息

   當在一個redis客戶端發佈了頻道消息以後,監聽(subscribe)了該頻道消息的各個客戶端(IP不一樣),便可收到該消息。

例如:發佈與訂閱信息測試

1.先打開兩個客戶端,監聽(subscribe)不一樣的頻道;第一個客戶端監聽了tv1和tv2頻道,第二個客戶端監聽了tv1頻道:

2.打開第第三個客服端,發佈(publish)消息:

3.再去看看第一個客戶端和第二個客服端:

有沒發現,不一樣的客戶端只要訂閱了相關的頻道,就會收到對應的消息。

 

5.虛擬內存的使用

  redis的虛擬內存就是把不常常訪問的數據從內存交換到磁盤中,從而騰出寶貴的內存空間用於其餘須要訪問的數據。(也能夠將數據分割到多個redis server中)

配置虛擬內存的使用:

1.打開從服務器的redis.conf文件,ctrl+f查找"vm",結果以下圖:

2.分別在redis.conf文件中開啓如下配置項:

 vm-enabled yes #開啓vm功能

vm-swap-file /tmp/redis.swap #交換出來的values保存的路徑

vm-max-memory 100000 #redis使用的最大內存上限

vm-page-size 32 #每一個頁面的大小32字節

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

vm-max-threads 4 #用於執行values對象換入的工做線程數量

作好以上配置,重啓redis,redish會提示:

If you *really* want VM add this in the config file: 

                 really-use-vm yes

將配置項 really-use-vm yes 加到redis.conf文件便可。

相關文章
相關標籤/搜索