標籤:
Redis進階實用特性:
1.安全性
2.主從複製
3.交易處理
4.持久化機制
5.發布訂閱訊息
6.虛擬記憶體的使用
安全性:
設定用戶端串連後進行任何其他指定前需要使用的密碼警告:因為Redis速度相當快,所以一台比較好的伺服器下一個外部的使用者可以在一秒鐘進行150k次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解
配置方法:
requirepass beijing(在設定檔中配置密碼)
auth beijing(授權方式1)
redis-cli -a beijing(授權方式2)
主從複製:
Redis主從複製配置和使用都非常簡單,通過主從複製可以允許多個Redis server擁有和master server相同的資料庫副本
Redis主從複製特點:
1.Master可以擁有多個slave
2.多個slave可以串連同一個master外,還可以串連到其他slave
3.主從複製不會阻塞master,在同步資料時,master可以繼續處理client請求
4.提高系統的伸縮性
Redis主從複製過程:
1.Slave與master建立串連,發送sync同步命令
2.Master會啟動一個後台進程,將資料庫快照集儲存到檔案中,同時master主進程會開始收集新的寫命令並緩衝。
3.後台完成儲存後,就將此檔案發送給slave
4.slave將檔案儲存到硬碟上
配置主從伺服器:
配置slave伺服器很簡單,只需在slave的設定檔中加入一下配置:
slaveof 192.168.1.1 6379 #指定master的IP和連接埠
masterauth lamp #這是主機的密碼
交易處理:
Redis對事物的支援目前還比較簡單,Redis智能保證一個client發起的事務中的命令可以連續的執行,而中間不會插入其中client的命令,當一個client在一個串連中發出multi命令時,這個串連會進入一個事務上下文該串連後續的命令不會立即執行,而是先放到一個隊列中當執行exec命令時,redis會順序的執行隊列中的所有命令、
添加一個事務
命令:
multi
OK
incr a
QUEUED
incr b QUEUED
exec
1)1
2)1
如何取消一個事務(復原)
dicard
如果有一條不成功,並不影響上面的操作
incr age
incr name #不成功
exec
樂觀鎖複雜事務控制
樂觀鎖:大多數是基於資料版本(version)的記錄機制實現的,即為資料加一個版本的標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表添加一個“version”欄位來實現讀取出資料時,將此版本號碼一同讀出,之後更新時,對此版本號碼加1,此時,將提交資料的版本號碼與資料表對應記錄的目前的版本號進行對比,如果提交的資料版本號碼大於資料庫目前的版本號,則予以更新,否則認為是到期資料。watch命令會監視給定的key,當exec時候如果監視的key從調用watch後發生過變化,則整個事務會失敗,也可以調用watch多次監視多個key,這樣就可以對指定的key加樂觀鎖了,注意watch的key是對整個串連有效,事務也一樣,如果串連斷開,監視和事務會被自動清除,當然了exec,discard,unwatch命令都會清楚串連中的所有監視
持久化機制:
Redis是一個支援持久化的記憶體資料庫,也就是說redis需要經常將記憶體中的資料同步到硬碟來保證持久化
Redis支援兩種持久化方式:
1.snapshotting(快照)也就是預設
2.Append-only file(縮寫aof)的方式
Snapshotting方式
快照是預設的持久化方式,這種方式是將記憶體中資料以快照的方式寫入二進位檔案中,預設的檔案名稱為dump.rdb可以通過配置設定自動做快照持久化的方式,我們可以配置redis在n秒內如果超過m個key修改就自動做快照
配置方式:
save 900 1 #900秒內如果超過1個key被修改,則發起快照儲存
save 300 10 #300秒內容如果超過10個key被修改,則發起快照儲存
save 60 10000
aof方式
由於快照方式是在一定間隔時間做一次的,所以如果redis意外down掉的話,就會丟失最後一次快照後的所有修改。aof比快照方式有更好的持久化性,是由於在使用aof時,redis會將每個收到的寫命令都通過write函數追加到檔案中,當redis重啟時會通過重新執行檔案中儲存的寫命令來記憶體中重建真箇資料庫的內容。當然由於os會在核心中緩衝write做的修改,所以可能不是立即寫入磁碟上,這樣aof方式的持久化也還是有可能會丟失布馮修改。可以通過設定檔告訴redis我們想要通過fsync函數強制os寫入到磁碟的時機。
配置方式:
appendonly yes //啟用aof持久化方式
#appendfsync always //收到寫命令就立即寫入磁碟最慢,但是保證完全的持久化
appendfsync everysec //每秒鐘寫入磁碟一次,在效能和持久化方面做了很好的折中
#appendfync no //完全依賴os,效能最好持久化沒保證
發布及訂閱訊息:
發布訂閱(pub/sub)是一種訊息通訊模式,主要的目的是解耦訊息發行者和訊息訂閱者之間的耦合,這點和設計模式中的觀察者模式比較相似。pub /sub不僅僅解決發行者和訂閱者直接代碼層級耦合也解決兩者在物理部署上的耦合。redis作為一個pub/sub server,在訂閱者和發行者之間起到了訊息路由的功能。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱自己感興趣的訊息類型,redis將訊息類型稱為通道(channel)。當發行者通過publish命令向redis server發送特定類型的訊息時。訂閱該訊息類型的全部client都會收到此訊息。這裡訊息的傳遞是多對多的。一個client可以訂閱多個 channel,也可以向多個channel發送訊息。
虛擬記憶體:
Redis的虛擬記憶體與作業系統的虛擬記憶體不是一回事,但是思路和目的都是相同的。都是暫時把不經常訪問的資料從記憶體交換到磁碟中,從而騰出寶貴的記憶體空間用於其他需要訪問的資料。尤其是對於redis這樣的記憶體資料庫,記憶體總是不夠用的。除了可以將資料分割到多個
redisserver外。另外能夠提高資料庫容量的辦法就是使用虛擬記憶體把那些不經常訪問的資料交換到磁碟上。
配置:
vm-enabled yes #開啟vm功能
vm-swap-file /tmp/redis.swap #交換出來的value儲存的檔案路徑
vm-max-memory 1000000 #redis使用的最大記憶體上限
vm-page-size 32 #每個頁面的大小32位元組
vm-pages 13417728 #最多使用多少頁面
vm-max-threads 4 #用於執行value對象換入患處的背景工作執行緒數量
啟動後提示,還要配置:
really-use-vm yes
註:Redis系列部落格均是結合兄弟連Redis學習視頻的筆記!
Redis學習(6)-Redis進階實用特性