[Redis]Redis高級特性的配置及使用


----------------------------------------------------------------------------

【Redis安全性】

一 . 默認我們進入Redis客戶端是不需要密碼的,但是在使用任何命令前保證已授權,這在一個你不信任其它人的環境里可能有用。

  1. 按照如下方式可設置密碼:

  ① 修改配置文件(默認為/usr/local/etc/redis.conf),找到requirepass foobared,默認已注釋掉;將密碼設為123456只需要這樣,requirepass 123456,然后重啟服務。(殺掉主進程:kill -9 進程號,啟動:/usr/local/bin/redis-server /usr/local/etc/redis.conf)

    ② 此時/usr/local/bin/redis-cli進入到客戶端就需要獲取權限,沒有將提示:(error) NOAUTH Authentication required.

   

  2. 輸入密碼有兩種方式:

  ① 輸入任何命令前,在客戶端界面執行:auth 123456

  ② 進入客戶端時輸入密碼:/usr/local/bin/redis-cli -a 123456

 

  其實auth本來應該一直被注釋掉,因為向后兼容性並且大部分人不需要權限(例如:他們運行自己的服務)。

 

注意:由於Redis非常快,針對於一台好的機器一個外部的使用者可以每秒嘗試150k次密碼。這意味着你應該使用一個非常強壯的密碼,否則很容易被破解。

 

二. 命令的重命名:

Redis支持在一個共享的環境中對危險命令的名字進行修改,例如:CONFIG這個命令可以重命名成其它很難猜到的名字,以便對內部使用的工具可用而對一般客戶端不可用。

  如:rename-command CONFIG othernameofconfig

 

同樣,通過重命名為空字符串可以使一個命名失效。

  如:rename-command CONFIG ""

 

注意:命名重命名將記錄到AOF文件中 或 傳輸到slave,並且可能會引起問題。

 

【Redis主從復制】

一. Redis主從復制特點:

  ① master可以擁有多個slave

  ② 多個slave可以連接同一個master外,還可以連接到其它slave

  ③ 主從復制不會阻塞master,在同步數據時,master可以繼續處理client請求

  ④ 提高系統的伸縮性

 

二. Redis主從復制過程:

  ① slave與master建立連接,發送sync同步命令

  ② master啟動一個后台進程,將數據庫快照保存到文件中,同時master主進程開始收集新的寫命令並緩存。

  ③ 后台完成保存后,就將此文件發送給slave

  ④ slave將此文件保存到硬盤上

 

三. 配置Redis從服務器:

  要設置IP使用:ifconfig eth0 192.168.117.224

 

  vim /usr/local/etc/redis.conf  # 找到slaveof 和 masterauth,配置如下

  slaveof <masterip> <masterport>  # slaveof 192.168.88.90 6379

  masterauth <master-password>     #masterauth 123456

 

  現在在master里設置一個鍵,如:set name weichen;使用keys * 或 get name 查看slave是否能復制成功。

  

  自Redis2.6后,slave默認將只讀;在Redis從庫中寫,會出現如下提示:

  

  不過這個可以在配置文件里面作更改(slave-read-only no),然后重啟Redis即可允許寫操作。

  允許slave寫操作,一方面對存儲臨時的數據有用(因為在和主庫重新同步后,從庫數據可以很容易被刪除掉),但是如果由於配置錯誤導致客戶端對其寫操作則會引發問題。

  slave只讀的設計是防止在網絡上暴露給不被信任的客戶端,僅僅是針對誤用Redis實例的一個保護層;但是一個只讀的slave仍然默認輸出所有管理命令,比如 CONFIG, DEBUG等等。在一定程度上,你可以通過使用 'rename-command' 跟蹤所有的管理/危險命令來提高只讀的slave的安全性。

 

  同步復制策略:disk 或 socket。注意:目前無盤復制是實驗性的。

  repl-diskless-sync no

 

(用info查看當前Redis服務器信息)

  通過幾個參數可以判斷是Reis主還是從,

  role:master

  slave0:192.168.88.90,6379,online

 

  redis_version 3.0.3 包含下面幾類服務器信息:

  #Server

  #Clients

  #Memory

  #Persistence

  #Stats

  #Replication

  #CPU

  #Cluster

 

注:只要Redis slave配置完成,任何時候slave打開,master數據都會自動復制。

 

【Redis隊列/事務】

一. 使用multi打開一個隊列,exec執行隊列命令,discard取消隊列;

 

 

二. 與MySQL的事務不同的是,Redis隊列中的命令有未執行成功的,整個事務不會回滾。

 

三. 樂觀鎖:使用watch命令對key監控,如果在watch后,該key發生過改變,則事務將失敗(即已過期);可以調用多次watch監控多個key;exec、discard、unwatch都會清除連接中的監控。

例如:上面的age現在是21,先對age進行watch age,此時multi打開隊列進行等待,另一方面打開新終端,對age進行set age 30,設置成功后,在第一個終端內執行set age 40,exec執行,提示nil。

 

【Redis持久化】

一. Snapshotting(快照)。

  Redis默認的持久化方式,將內存中的數據以快照的方式寫入到二進制文件(dump.rdb)中,通過配置文件可以配置多少秒后有至少多少次修改就進行快照。

  save 900 1     #900秒后有至少1次key的修改就持久化

  save 300 10     #300秒后有至少10次key的修改就持久化

  save 60 10000   #60秒后有至少10000次key的修改就持久化

  

  阻止快照的方式:

  ① 注釋掉上面三行

  ② 或 改成save ""。

 

二. Append Only File(AOF方式)

  Redis默認異步將數據備份到磁盤,這種模式對許多應用足夠了,但是如果Redis進程出現問題或斷電,將導致最近幾分鍾的寫數據丟失(根據配置文件中的保存時間點)。

  Append Only File(AOF)是提供了更好持久性的可選的持久化模式。例如通過fsync(同步內存中所有已修改的文件數據到儲存設備)的方式,Redis可以做到在服務器斷電的情況下僅丟失一秒鍾的寫數據,或者在Redis進程錯誤的情況下丟失單條寫數據。

 

  AOF和數據庫存儲可以同時打開,如果在安裝Redis時打開支持AOF,那么Redis將會使用AOF。(http://redis.io/topics/persistence)

  appendonly no            #默認AOF為關閉狀態

  appendfilename "appendonly.aof"   #指定寫入的文件名

  

  調用fsync()告訴操作系統實時將數據寫入磁盤而不是寫入輸出緩存,一些OS可能不會實時刷新清空緩存數據。為此,Redis提供三種不同的模式:

  appendfsync always  #速度慢,但最安全,每次write都異步持久化

  appendfsync everysec #默認選項,每秒一次的異步保存,速度和數據安全的折中方案

  appendfsync no     #速度較快,不執行異步,讓系統自動刷新數據

 

  結論:如果能在考慮到數據丟失的情況下保證運行,可以使用Snapshotting 或者 相反的使用"always"(非常慢但比"everysec"安全一點)。

 

  打開AOF模式(appendonly yes),etc/ 將新增appendonly.aof文件(存儲的是操作內容):

 

五. 發布/訂閱(pub/sub)

訂閱者使用subscribe和psubscribe命令向Redis服務訂閱消息,發布者通過publish命令向Redis服務發送信息時,訂閱的客戶端將收到消息。

 

如:終端1:subscribe m1

  終端2:subscribe m1 m2

  終端3:publish m1 abc;publish m2 hello;#publish命令返回頻道訂閱者數量,終端3發布的消息將實時顯示到終端1和終端2

 

 

 

 

 

 

Link: http://www.cnblogs.com/farwish/p/4351828.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM