標籤:
----------------------------------------------------------------------------
【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
@黑眼詩人 <www.farwish.com>
[Redis]Redis進階特性的配置及使用