1. 程式人生 > 其它 >python自動化測試流程(Python自動化測試框架有哪些)

python自動化測試流程(Python自動化測試框架有哪些)

為什麼使用Redis

Redis是NoSQL(非關係型資料庫)型別資料庫,在NoSQL資料庫中資料之間是無聯絡的,無關洗的,資料的結構是鬆散的,可變的。

關係型資料庫的瓶頸:

就像MySQL就是關係型資料庫

(1)無法應對每秒上萬次的讀寫請求,無法處理大量集中的高併發操作。關係型資料的是 IO密集的應用。硬碟 IO 也變為效能瓶頸

(2)表中儲存記錄數量有限,橫向可擴充套件能力有限,一張表最大二百多列。縱向資料可承受能力也是有限的,一張表的資料到達百萬級,讀寫的速度就會逐漸的下降。面對海量資料, 必須使用主從複製,分庫分表。這樣的系統架構是難以維護的。

大資料查詢 SQL 效率極低,資料量到達一定程度時,查詢時間會呈指數級別增長

(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)等型別,每種資料型別有自己的專屬命令。所以它通常也被稱為資料結構伺服器。

官網:https://redis.io/

中文:http://www.redis.cn/

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操作命令

基本命令

  1. 溝通命令,檢視狀態:ping

    輸入ping,redis會返回PONG,表示redis服務執行正常。

  2. 檢視當前資料庫中key的數目:dbsize

    語法:dbsize

    作用:返回當前資料庫的key的數量

  3. Redis預設使用16個庫,從0到15,如果對資料庫的個數進行修改,在redis.conf檔案中,修改databases 16語句中的數字

  4. 切換資料庫:select index

    命令:select n

  5. 刪除當前庫的所有資料:flushdb

  6. 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

使用 -p 引數指定埠,例如:./redis-cli -p 新設定埠