python自動化測試流程(Python自動化測試框架有哪些)
Redis是NoSQL(非關係型資料庫)型別資料庫,在NoSQL資料庫中資料之間是無聯絡的,無關洗的,資料的結構是鬆散的,可變的。
關係型資料庫的瓶頸:
就像MySQL就是關係型資料庫
(1)無法應對每秒上萬次的讀寫請求,無法處理大量集中的高併發操作。關係型資料的是 IO密集的應用。硬碟 IO 也變為效能瓶頸
(2)表中儲存記錄數量有限,橫向可擴充套件能力有限,一張表最大二百多列。縱向資料可承受能力也是有限的,一張表的資料到達百萬級,讀寫的速度就會逐漸的下降。面對海量資料, 必須使用主從複製,分庫分表。這樣的系統架構是難以維護的。
(3)無法簡單地通過增加硬體、服務節點來提高系統性能。資料整個儲存在一個數據庫中的。多個伺服器沒有很好的解決辦法,來複制這些資料。
(4)關係型資料庫大多是收費的,對硬體的要求較高。軟體和硬體的成本花費比重較大。
因為關係型資料庫有這些瓶頸,因此目前在網際網路領域海量資料的專案中NoSQL應用非常的廣泛
非關係型資料庫優勢:
-
大資料量,高效能
NoSQL 資料庫都具有非常高的讀寫效能,尤其在大資料量下,同樣表現優秀。這得益於它的無關係性,資料庫的結構簡單。關係型資料庫(例如 MySQL)使用查詢快取。這種查詢快取在更新資料後,快取就是失效了。在頻繁的資料讀寫互動應用中。 快取的效能不高。NoSQL 的快取效能要高的多。
-
靈活的資料模型
NoSQL 無需事先為要儲存的資料建立欄位,隨時可以儲存自定義的資料格式。而在關係資料庫裡,增刪欄位是一件非常麻煩的事情。如果是非常大資料量的表,增加欄位簡直就是一個噩夢。尤其在快速變化的市場環境中,使用者的需求總是在不斷變化的。
-
高可用
NoSQL 在不太影響效能的情況,就可以方便的實現高可用的架構。NoSQL 能很好的解決關係型資料庫擴充套件性差的問題。彌補了關係資料(比如 MySQL) 在某些方面的不足,在某些方面能極大的節省開發成本和維護成本。
MySQL 和 NoSQL 都有各自的特點和使用的應用場景,兩者結合使用。讓關係資料庫關注在關係上,NoSQL 關注在儲存上。
-
低成本
這是大多數分散式資料庫共有的特點,因為主要都是開源軟體,沒有昂貴的 License 成本
非關係型資料庫的劣勢:
-
無關係,資料之間是無聯絡的
-
不支援標準的 SQL,沒有公認的 NoSQL 標準
-
沒有關係型資料庫的約束,大多數也沒有索引的概念
-
沒有事務,不能依靠事務實現 ACID.
-
沒有豐富的資料型別(數值,日期,字元,二進位制,大文字等)
Redis安裝和使用
Redis是當今非常流行的基於KV結構的作為Cache使用的NoSQL資料庫
Redis介紹:Remote Dictionary Server(Redis) 是一個開源的使用 ANSI C 語言編寫、支援網路、可基於記憶體亦可持久化的 Key-Value 資料庫. Key 字元型別,其值(value)可以是 字串(String), 雜湊(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等型別,每種資料型別有自己的專屬命令。所以它通常也被稱為資料結構伺服器。
Redis下載地址:http://www.redis.cn/download.html
安裝步驟:https://www.cnblogs.com/jia-hao/p/15763482.html
redis的開啟和關閉
開啟
前臺啟動:./redis-server
後臺啟動:./redis-server &
1.前臺啟動下:啟動redis的伺服器端,切換到src目錄下執行redis-server程式,如果以前臺的方式啟動,則不能退出當前視窗,如果退出視窗,應用就會終止。
2.後臺啟動下,在src目錄下執行./redis-server & 然後這時候關閉視窗,檢視redis程序,依然存在。ps -ef | grep redis
如果安裝的時候執行了make install 語句,則不需要必須在src目錄下執行。
關閉Redis
1.執行redis-cli shutdown 這種方式下redis先完成資料操作,然後在關閉。推薦使用
2.kill pid 或者 kill -9 pid,這種不會考慮當前是否有資料正在執行操作,直接關閉應用。
Redis操作命令
基本命令
-
溝通命令,檢視狀態:ping
輸入ping,redis會返回PONG,表示redis服務執行正常。
-
檢視當前資料庫中key的數目:dbsize
語法:dbsize
作用:返回當前資料庫的key的數量
-
Redis預設使用16個庫,從0到15,如果對資料庫的個數進行修改,在redis.conf檔案中,修改databases 16語句中的數字
-
切換資料庫:select index
命令:select n
-
刪除當前庫的所有資料:flushdb
-
redis自帶的客戶端退出當前redia連線:exit或者quit
Key的操作命令
keys:
語法:keys pattern
作用:查詢所有符合模式pattern的key,pattern可以使用萬用字元
萬用字元:
*:表示0-多個字元,例如:keys * 查詢所有的key,keys w* 查詢所有以w開頭的key
?: 表示單個字元,例如:wo?d,匹配word,wood等等。
exists
語法:exists key [key....]
作用:判斷key是否存在
返回值:整數,存在key返回1,其他返回0,使用多個key時,返回存在的key的數量。
expire
語法:expire key seconds
作用:設定key的生存時間,如果超過時間,key自動刪除,單位為秒
返回值:設定成功返回數字1,其他情況則為0.
例:已存在一個key為k1,設定其生存時間為10秒,則 expire k1 10
ttl
語法:ttl key
作用:以秒為單位,返回key的剩餘生存時間
返回值:-1:沒有設定key的生存時間,key永不過期
-2:key不存在
數字:key的剩餘時間,以秒為單位
type
語法:type key
作用:檢視key所儲存值的資料型別
返回值:字串表示的資料型別
1)none key不存在
2)string 字串
3)list 列表
4)set 集合
5)zset 有序集
6)hash 雜湊表
del
語法:del key [key......]
作用:刪除存在的key,不存在的key忽略
返回值:數字,刪除的key的數量
redis的5種資料型別
字串資料型別string
字串型別是Redis中最基本的資料型別,他能儲存任何形式的字串,包括二進位制資料,序列化後的資料,JSON化的物件甚至是一張圖片,最大是512M
雜湊型別hash:
Redis hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。
列表型別list
Redis列表是簡單的字串列表,按照插入順序排序,可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)。
集合型別set
Redis的Set是string型別的無序集合,集合成員是唯一的,即集合中不能出現重複的資料。
有序集合型別zset(sorted set)
Redis有序集合zset和集合set一樣也是string型別元素的集合,且不允許重複的成員,不同的是zset的每個元素都會關聯一個分數(分數可以重複),redis通過分數來為集合中的成員進行從小到大的排序。
Redis資料型別操作命令
字串型別(string)
基本命令
set
將字串值value設定到key中
語法:set key value
向已經存在的key設定新的value,會覆蓋原來的值。
get
獲取key中設定的字串值
語法:get key
incr
將key中儲存的數字值加1,如果key不存在,則key的值先被初始化為0再執行incr操作(只能對數字型別的資料操作),返回加1後的結果
語法:incr key
decr
將key中儲存的數字值減1,如果key不存在,則key的值先被初始化為0再執行decr操作(只能對數字型別的資料操作),返回減1後的結果
append
語法:append key value
說明:如果key存在,則將value追加到key原來舊值的末尾,如果key不存在,則將key設定的值為value
返回值:追加字串之後的總長度
常用命令
strlen
語法:strlen key
說明:返回key所儲存的字串值的長度
返回值:如果key存在,返回字串值的長度,如果key不存在,返回0.
getrange
語法:getrange key start end
作用:獲取key中字串值從start到end結束的字串,包括start和end,負數表示從字串的末尾開始,-1表示最後一個字元
返回值:擷取的子字串
setrange
語法:setrange key offset value
說明:用value覆蓋(替代)key的儲存得值從offset開始,不存在的key做空白字串。
返回值:修改後的字串的長度
mset
語法:mset key value [key value....]
說明:同時設定一個或者多個 key-value對
返回值:ok
mget
語法:mget key [key....]
作用:獲取所有(一個或者多個)給定key的值
返回值:包含所有key的列表
雜湊型別hash
redis中hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。
基本命令
hset
語法:hset hash表的key field value
作用:將雜湊表 key 中的域 field 的值設為 value ,如果 key 不存在,則新建 hash 表,執行賦值,如果有 field ,則覆蓋值。
返回值:1.如果field是hash表中新field,且設定成功,返回1
2.如果field已經存在,舊值覆蓋新值,返回0
hget
語法:hget key field
作用:獲取雜湊表key中給定域field的值
返回值:field域的值,如果key不存在或者field不存在返回nil
hmset
語法:hmset key field value [field value.....]
說明:同時將多個field-value(域-值)設定到雜湊表key中,此命令會覆蓋已經存在field,如果hash 表 key 不存在,建立空的 hash 表,執行 hmset.
返回值:設定成功返回ok,如果失敗返回一個錯誤。
hmget
語法:hmget key field [field....]
作用:獲取雜湊表key中一個或多個給定域的值
返回值:返回和field順序對應的值,如果field不存在,返回nil
hgetall
語法:hgetall key
作用:獲取雜湊表key中所有的域和值
返回值:以列表形式返回hash中的域和域的值,如果key不存在,則返回空hash
hdel
語法:hdel key field [field....]
作用:刪除雜湊表key中的一個或者多個指定域field,不存在的field直接忽略
返回值:成功刪除的field的數量
常用命令
hkeys
語法:hkeys key
作用:檢視雜湊表key中的所有的field域
返回值:包含所有的field的列表,key不存在的話返回空列表
hvals
語法:hvals key
作用:返回雜湊表中所有域的值
返回值:包含雜湊表所有域值的列表,key不存在的話返回空列表
hexists
語法:hexists key field
作用:檢視雜湊表key中,給定域field是否存在
返回值:如果field存在,返回1,其他情況返回0
列表型別list
Redis列表是簡單的字串列表,按照插入順序排序,可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)。
基本命令
lpush
語法:lpush key value [value......]
作用:將一個或者多個值value插入到列表key的表頭(最左邊),從左邊開始加入智,從左到右的順序依次插入到表頭。
返回值:數字,新列表的長度
rpush
語法:rpush key value [value......]
作用:將一個或多個值value插入到列表key的表尾(最右邊),各個value值按從左到右的順序依次插入到表尾
返回值:數字,新列表的長度
lrange
語法:lrange key start stop
作用:獲取列表 key 中指定區間內的元素,0 表示列表的第一個元素,以 1 表示列表的第二個元素;start , stop 是列表的下標值,也可以負數的下標, -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。 start ,stop 超出列表的範圍不會出現錯誤。
返回值:指定區間的列表
list
語法:lindex key index
作用:獲取列表 key 中下標為指定 index 的元素,列表元素不刪除,只是查詢。0 表示列表的第一個元素,以 1 表示列表的第二個元素;start , stop 是列表的下標值,也可以負數的下標, -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推
返回值:指定下標的元素,index不在列表範圍,則返回nil
llen
語法:llen key
作用:獲取列表key的長度
返回值:數值,列表的長度,key不存在的話返回0
常用命令
lrem
語法:lrem key count value
作用:根據引數 count 的值,移除列表中與引數 value 相等的元素, count >0 ,從列表的左側向右開始移除; count < 0 從列表的尾部開始移除;count = 0 移除表中所有與 value 相等的值。(例:count=2,表示從左側開始找兩個與value相同的元素刪除,count=-2,從右側開始找兩個與value相同的元素刪除)
返回值:數值,移除的元素個數
lset
語法:lset key index value
作用:將列表key下標為index的元素的值設定為value
返回值:設定成功返回 ok ; key 不存在或者 index 超出範圍返回錯誤資訊
linsert
語法:linsert key BEFORE|ALFTER pivot value
作用:將值value插入到列表key當中位於值pivot之前或之後的位置,如果key不存在,或者pivot不在列表中,則不執行任何操作
返回值:命令執行成功,返回新列表的長度,如果沒有找到pivot,返回-1,如果key不存在,返回0.
集合型別set
redis的set是string型別的無序集合,集合成員是唯一的,即集合中不能出現重複的資料。
基本命令
sadd
語法:sadd key memeber [member]
作用:將一個或者多個member元素加入到集合key當中,已經存在於集合的member元素將被忽略,不會再加入
返回值:加入到集合的新元素的個數,不包括被忽略的元素。
smembers
語法:smembers key
作用:獲取集合key中的所有成員元素,不存在的key視為空集合
sismember
語法:sismember key member
作用:判斷member元素是否是集合key的成員
返回值:member是集合成員返回1,其他返回0
scard
語法:scard key
作用:獲取集合裡面的元素個數
返回值:數字,key的元素個數,其他情況返回0
srem
語法:srem key member [member....]
作用:刪除集合key中的一個或多個member元素,不存在的元素被忽略。
返回值:數字,成功刪除的元素個數,不包括被忽略的元素。
常用命令
srandmember
語法:srandmember key [count]
作用:只提供 key,隨機返回集合中一個元素,元素不刪除,依然在集合中;提供了 count 時,count 正數, 返回包含 count 個數元素的集合, 集合元素各不相同。count 是負數,返回一個 count 絕對值的長度的集合, 集合中元素可能會重複多次。
返回值:一個元素;多個元素的集合
spop
語法:spop key [count]
作用:隨機從集合中刪除一個元素,count是刪除的元素個數。
返回值:被刪除的元素,key不存在或空集合返回nil
有序集和型別zset(sorted set)
redis 有序集合zset和集合set一樣也是string型別元素的集合,且不允許重複的成員。
不同的是 zset 的每個元素都會關聯一個分數|數值(分數可以重複),redis 通過分數|數值來為集合中的成員進行從小到大的排序。
基本命令
zadd
語法:zadd key score member [score member…]
作用:將一個或多個 member 元素及其 score 值加入到有序集合 key 中,如果 member
存在集合中,則更新值;score 可以是整數或浮點數
返回值:數字,將新增的元素個數
zrange
語法:zrange key start stop [WITHSCORES]
作用:查詢有序集合,指定區間的內的元素。集合成員按 score 值從小到大來排序。 start,stop 都是從 0 開始。0 是第一個元素,1 是第二個元素,依次類推。以 -1 表示最後一個成員,-2 表示倒數第二個成員。WITHSCORES 選項讓 score 和 value 一同返回。
返回值:自定區間的成員集合
zrevrange
語法:zrevrange key start stop [withscores]
作用:返回有序集key中,指定區間內的成員,其中成員的位置按score值遞減(從大到小)來排列(與zrange排列順序相反)其他都和zrange命令一樣。
返回值:自定區間的成員集合
zrem
語法:zrem key member [member.....]
作用:刪除有序集合key中的一個或多個成員,不存在的成員被忽略
返回值:被成功刪除的成員數量,不包括被忽略的成員
zcard
語法:zcard key
作用:獲取有序集key的元素成員的個數
返回值:key存在返回集合元素的個數,key不存在,返回0
常用命令
zrangebyscore
語法:zrangebyscore key min max [withscores] [limit offset count]
作用:獲取有序集 key 中,所有 score 值介於 min 和 max 之間(包括 min 和 max)的成員,有序成員是按遞增(從小到大)排序。min ,max 是包括在內 , 使用符號“ (” 表示不包括。 min , max 可以使用 -inf +inf 表示最小和最大 ,limit 用來限制返回結果的數量和區間。withscores 顯 示 score 和 value,limit用來顯示分頁,offset表示起始位置,count表示要顯示的資料數量
返回值:指定區間的集合資料
zrevrangebyscore
語法:zrevrangebyscore key max min [withscores] [limit offset count]
作用:返回有序集 key 中, score 值介於 max 和 min 之間(預設包括等於 max 或 min )的所有的成員。有序整合員按 score 值遞減(從大到小)的次序排列。其他同 zrangebyscore
zcount
語法:zcount key min max
作用:返回有序集 key 中, score 值在 min 和 max 之間(預設包括 score 值等於 min 或 max )的成員的數量
高階話題
事務
事務操作的命令
multi
語法:multi
作用:標記一個事務的開始,事務內的多條命令會按照先後順序被放進一個隊列當中
返回值:總是返回ok
exec
語法:exec
作用:執行所有事物塊內的命令
返回值:事務內所有執行語句內容,事務被打斷(影響)返回nil
discard
語法:discard
作用:取消事務,放棄執行事務塊內的所有命令
返回值:總是返回ok
watch
語法:watch key [key......]
作用:監視一個(或多個)key,如果在事務執行之前這個(或這些)key被其他命令所改動,那麼事務將被打斷。
返回值:總是返回ok
unwatch
語法:unwatch
作用:取消watch命令對所有key的監視,如果在執行watch命令之後,exec命令或discard命令先被執行了的話,那麼就不需要再執行unwatch了
返回值:總是返回ok
持久化
持久化可以理解為儲存,就是將資料儲存到一個不會丟失的地方,如果把資料放在記憶體中,電腦關閉或重啟資料就會丟失,所以放在記憶體中的資料不是持久化的,而放在磁碟就算是一種持久化。
Redis 的資料儲存在記憶體中,記憶體是瞬時的,如果 linux 宕機或重啟,又或者 Redis 崩潰或重啟,所有的記憶體資料都會丟失,為解決這個問題,Redis 提供兩種機制對資料進行持久化儲存,便於發生故障後能迅速恢復資料。
RDB方式持久化
Redis Database(RDB),就是在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,資料恢復時將快照檔案直接再讀到記憶體。
RDB 儲存了在某個時間點的資料集(全部資料)。儲存在一個二進位制檔案中,只有一個檔案。預設是 dump.rdb。RDB 技術非常適合做備份,可以儲存最近一個小時,一天,一個月的全部資料。儲存資料是在單獨的程序中寫檔案,不影響 Redis 的正常使用。RDB 恢復資料時比其他 AOF 速度快。
RDB方式優缺點
優點:由於儲存的是資料快照檔案,恢復資料很方便,也比較快
缺點:
1)會丟失最後一次快照以後更改的資料。如果你的應用能容忍一定資料的丟失,那麼使用 rdb 是不錯的選擇;如果你不能容忍一定資料的丟失,使用 rdb 就不是一個很好的選擇。
2)由於需要經常操作磁碟,RDB 會分出一個子程序。如果你的 redis 資料庫很大的話, 子程序佔用比較多的時間,並且可能會影響 Redis 暫停服務一段時間(millisecond 級別),如果 你的資料庫超級大並且你的伺服器 CPU 比較弱,有可能是會達到一秒。
AOF方式持久化
Append-only File(AOF),Redis 每次接收到一條改變資料的命令時,它將把該命令寫到一個 AOF 檔案中(只記錄寫操作,讀操作不記錄),當 Redis 重啟時,它通過執行 AOF 檔案中所有的命令來恢復資料。
總結:1.append-only 檔案是另一個可以提供完全資料保障的方案;
2.AOF 檔案會在操作過程中變得越來越大。比如,如果你做一百次加法計算,最後你只會 在資料庫裡面得到最終的數值,但是在你的 AOF 裡面會存在 100 次記錄,其中 99 條記錄對 最終的結果是無用的;但 Redis 支援在不影響服務的前提下在後臺重構 AOF 檔案,讓檔案得以 整理變小
3.可以同時使用這兩種方式,redis 預設優先載入 aof 檔案(aof 資料最完整);
主從複製讀寫分離
通過持久化功能,Redis 保證了即使在伺服器重啟的情況下也不會丟失(或少量丟失)資料,但是由於資料是儲存在一臺伺服器上的,如果這臺伺服器出現故障,比如硬碟壞了, 也會導致資料丟失。
為了避免單點故障,我們需要將資料複製多份部署在多臺不同的伺服器上,即使有一臺伺服器出現故障其他伺服器依然可以繼續提供服務。
這就要求當一臺伺服器上的資料更新後,自動將更新的資料同步到其他伺服器上
Redis 提供了複製(replication)功能來自動實現多臺 redis 伺服器的資料同步(每天19 點 新聞聯播,基本從 cctv1-8,各大衛視都會播放)
我們可以通過部署多臺 redis,並在配置檔案中指定這幾臺 redis 之間的主從關係,主負責寫入資料, 同時把寫入的資料實時同步到從機器, 這種模式叫做主從複製, 即master/slave,並且 redis 預設 master 用於寫,slave 用於讀,向 slave 寫資料會導致錯誤
主從複製的實現(master/slave)
方式 1:修改配置檔案,啟動時,伺服器讀取配置檔案,並自動成為指定伺服器的從伺服器,從而構成主從複製的關係
方式 2: ./redis-server --slaveof <master-ip> <master-port>,在啟動 redis 時指定當前服務成為某個主 Redis 服務的從 Slave
方式1的實現步驟
模擬多 Reids 伺服器, 在一臺已經安裝 Redis 的機器上,執行多個 Redis 應用模擬多個 Reids 伺服器。一個 Master,兩個 Slave.
A、新建三個 Redis 的配置檔案
如果 Redis 啟動,先停止。
作為 Master 的 Redis 埠是 6380
作為 Slaver 的 Redis 埠分別是 6382 , 6384
從原有的 redis.conf 拷貝三份,分別命名為 redis6380.conf, redis6382.conf , redis6384.conf
B、 編輯 Master 配置檔案
編輯 Master 的配置檔案 redis6380.conf : 在空檔案加入如下內容
include /usr/local/redis-3.2.9/redis.conf
daemonize yes port 6380
pidfile /var/run/redis_6380.pid logfile 6380.log
dbfilename dump6380.rdb
配置項說明:
include : 包含原來的配置檔案內容。/usr/local/redis-3.2.9/redis.conf 按照自己的目錄設定。
daemonize:yes 後臺啟動應用,相當於 ./redis-server & , &的作用。
port : 自定義的埠號
pidfile : 自定義的檔案,表示當前程式的 pid ,程序 id。
logfile:日誌檔名
dbfilename:持久化的 rdb 檔名
C、 編輯 Slave 配置檔案
編輯 Slave 的配置檔案 redis6382.conf 和 redis6384.conf: 在空檔案加入如下內容
①:redis6382.conf:
include /usr/local/redis-3.2.9/redis.conf
daemonize yes
port 6382
pidfile /var/run/redis_6382.pid logfile 6382.log
dbfilename dump6382.rdb slaveof 127.0.0.1 6380
配置項說明:
slaveof : 表示當前 Redis 是誰的從。當前是 127.0.0.0 埠 6380 這個 Master 的從。
②:redis6384.conf:
include /usr/local/redis-3.2.9/redis.conf daemonize yes
port 6384
pidfile /var/run/redis_6384.pid logfile 6384.log
dbfilename dump6384.rdb
slaveof 127.0.0.1 6380
D、啟動伺服器 Master/Slave 都啟動
啟動方式 ./redis-server 配置檔案 (./redis-server ../redis6380.conf)(./redis-server ../redis6382.conf)(./redis-server ../redis6384.conf)
啟動 Redis,並檢視啟動程序 ps -ef | grep redis
E、 檢視配置後的服務資訊
命令:
①: Redis 客戶端使用指定埠連線 Redis 伺服器
./redis-cli -p 埠
②:檢視伺服器資訊
info replication
到此所有過程完成,可以開始測試,可以得知只有主伺服器(6380)可以寫資料,從伺服器(6382,6384)不可以寫資料。
容災處理
master 上(冷處理:機器掛掉了,再處理)當 Master 服務出現故障,需手動將 slave 中的一個提升為 master, 剩下的 slave 掛至新的
命令:
①:slaveof no one,將一臺 slave 伺服器提升為 Master (提升某 slave 為 master)
②:slaveof 127.0.0.1 6381 (將 slave 掛至新的 master 上)
高可用sentinel哨兵
Sentinel 哨兵是 redis 官方提供的高可用方案,可以用它來監控多個 Redis 服務例項的執行情況。Redis Sentinel 是一個執行在特殊模式下的 Redis 伺服器。Redis Sentinel 是在多個Sentinel 程序環境下互相協作工作的。
注意:哨兵的個數必須是奇數,因為當主伺服器出現故障時候,必須由哨兵投票選取新的主伺服器
sentinel哨兵系統的三個主要任務
● 監控:Sentinel 不斷的檢查主服務和從伺服器是否按照預期正常工作。
● 提醒:被監控的 Redis 出現問題時,Sentinel 會通知管理員或其他應用程式。
● 自動故障轉移:監控的主 Redis 不能正常工作,Sentinel 會開始進行故障遷移操作。將一個從伺服器升級新的主伺服器。 讓其他從伺服器掛到新的主伺服器。同時向客戶端提供新的主伺服器地址。
1.sentinel配置
sentinel配置檔案
複製三份sentinel.conf檔案 (在redis安裝目錄下)
三個檔案分別命名:
● sentinel26380.conf
● sentinel26382.conf
● sentinel26384.conf
● 執行復制命令 cp sentinel.conf xxx.conf
2、三份 sentinel 配置檔案修改
● 修改 port 26380、 port 26382、 port 26384
● 修改 sentinel monitor mymaster 127.0.0.1 6380 2
格式:sentinel monitor <name> <masterIP> <masterPort> <Quorum 投票數>
Sentinel監控主(Master)Redis, Sentinel根據Master的配置自動發現Master的Slave,Sentinel預設埠號為26379 。
vim sentinel26380.conf
sentinel26382.conf 修改port 26382 , master的port 6382
sentinel26384.conf 修改port 26384 , master的port 6382
4、啟動 Sentinel
redis安裝時make編譯後就產生了redis-sentinel程式檔案,可以在一個redis中執行多個sentinel程序。
啟動一個執行在Sentinel模式下的Redis服務例項
./redis-sentinel sentinel 配置檔案
執行以下三條命令,將建立三個監視主伺服器的Sentinel例項:
./redis-sentinel ../sentinel26380.conf
./redis-sentinel ../sentinel26382.conf
./redis-sentinel ../sentinel26384.conf
在 XShell 開啟三個視窗分別執行。
5.結果
之後就可以關閉主伺服器檢視哨兵的處理情況,再開開主伺服器檢視哨兵的處理情況。
安全設定
設定密碼
訪問 Redis 預設是沒有密碼的,這樣不安全,任意使用者都可以訪問。可以啟用使用密碼才能訪問 Redis。 設定 Redis 的訪問密碼,修改 redis.conf 中這行 requirepass 密碼。密碼要比較複雜,不容易破解,而且需要定期修改。因為 redis 速度相當快,所以在一臺比較好的伺服器下,一個外部的使用者可以在一秒鐘進行 150K 次的密碼嘗試,需要指定非常非常強大的密碼來防止暴力破解。
開啟訪問密碼設定
修改 redis.conf , 使用 vim 命令。 找到 requirepass 行去掉註釋,requirepass 空格後就是密碼。
訪問有密碼的redis
如果 Redis 已經啟動,關閉後,重新啟動。
訪問有密碼的 Redis 兩種方式:
①:在連線到客戶端後,使用命令 auth 密碼 , 命令執行成功後,可以正常使用 Redis
②:在連線客戶端時使用 -a 密碼。例如 ./redis-cli -h ip -p port -a password
繫結ip
修改 redis.conf 檔案,把# bind 127.0.0.1 前面的註釋#號去掉,然後把 127.0.0.1 改成允許訪問你 redis 伺服器的 ip 地址,表示只允許該 ip 進行訪問。多個 ip 使用空格分隔。
例如 bind 192.168.1.100 192.168.2.10
修改預設埠
修改 redis 的埠,這一點很重要,使用預設的埠很危險,redis.conf 中修改 port 6379
將其修改為自己指定的埠(可隨意),埠 1024 是保留給作業系統使用的。使用者可以使用的範圍是 1024-65535