----------------------------------------------------------------------------
【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