昨天介紹了《Windows&Linux&MacOS如何快速搭建Redis》。搭建完成,往往會出現同一内網下其他主機無法連接redis-server的情況,原因可能有:protected-mode(保護模式)已開啟、bind綁定了無效的主機地址、bind設置了本地回環地址......為了徹底弄清楚protected-mode和bind對遠程訪問redis-server的影響,我特地設計了一些測試場景,像測試産品需求一樣測試這兩項配置。
一、redis配置項bind和protected mode解讀同軟件測試的流程一樣,在測試設計前,需要先弄懂産品需求(redis配置項bind和protected-mode)是什麼
弄清楚了redis配置項bind和protected-mode的需求,就可以進行測試場景設計了
1.驗證場景如下:redis所在主機地址為:192.168.1.123
運行python測試代碼的主機地址為:192.168.1.122
場景 |
前提:redis.conf配置 |
測試步驟 |
期望結果 |
測試結果 | |
1.開啟保護模式,生效 |
|
1.通過python代碼遠程連接redis protected mode:yes |
1.通過python代碼遠程連接redis 2.插入鍵值對:{"test1":0} 3.獲取鍵test1的值 |
1.連接成功 2.插入成功 3.value為0 | |
3.開啟保護模式,不生效(設置訪問密碼) |
|
1.通過python代碼遠程連接redis 2.插入鍵值對:{"test1":0} 3.獲取鍵test1的值 |
1.連接成功 2.插入成功 3.value為0 | ||
4.綁定無效ip |
|
1.通過python代碼遠程連接redis 2.插入鍵值對:{"test1":0} 3.獲取鍵test1的值 |
連接失敗 | ||
5.綁定本地回環地址-開啟保護模式 |
|
1.通過python代碼遠程連接redis 2.插入鍵值對:{"test1":0} 3.獲取鍵test1的值 |
連接失敗 | ||
6.綁定本地回環地址-關閉保護模式 |
|
1.通過python代碼遠程連接redis 2.插入鍵值對:{"test1":0} 3.獲取鍵test1的值 |
連接失敗 |
通過一段Python代碼簡單測試redis連通性:
import redis
class RedisHandler:
def __init__(self, host, port=6379, db=0):
self.client = redis.StrictRedis(host=host, port=port, db=db) # 生成客戶端連接,StrictRedis()默認使用連接池,不必再單獨使用ConnectPool
def set_string(self, name: str, value, ex=None, px=None, nx=False, xx=False) -> None:
"""
緩存中寫入str(單個)
:param name: 緩存名稱
:param value: 緩存值
:param ex: 過期時間(秒)
:param px: 過期時間(毫秒)
:param nx: 如果設置為True,則隻有name不存在時,當前set操作才執行(新增)
:param xx: 如果設置為True,則隻有name不存在時,當前set操作才執行(修改)
:return:
"""
self.client.set(name, value=value, ex=ex, px=px, nx=nx, xx=xx)
def get_key(self, name):
"""讀取緩存"""
print(self.client.get(name))
if __name__ == '__main__':
redis = RedisHandler(host='192.168.1.123')
redis.set_string("test1", 0)
redis.get_key("test1")
① 設置redis.conf
② 測試連通性
執行後報錯如下:
通過上圖可以看出:
連接Redis被拒絕了,此時Redis正在保護模式下運行,因為已啟用保護模式,未指定綁定地址,未設置訪問密碼。在此模式下,僅接受來自環回接口的連接,即本地連接。驗證通過,與期望的結果一緻。
2.保護模式不生效(設置bindip)-連接Redis成功① 設置redis.conf
② 測試連通性
盡管protected mode處于開啟狀态,但是因為bind綁定了本機IP地址,所以保護模式是不生效的,客戶端連接redis時,也能夠連接成功,如下圖所示,連接redis成功,并成功獲取到名為test1的key的value值為0,驗證通過,與期望的結果一緻:
3.保護模式不生效(設置訪問密碼)-連接Redis成功
① 設置redis.conf
② 測試連通性
暫未驗證
盡管protected mode處于開啟狀态,但是因為設置了訪問密碼,所以保護模式理論上是不生效的,即本地内網其他主機仍可以遠程連接訪問。
4.綁定無效IP-無法連接Redis① 設置redis.conf
② 測試連通性
此時redis配置的是無效的IP地址,服務無法成功啟動,所以客戶端連接被拒。驗證通過,符合預期。
5.綁定本地回環地址、開啟保護模式-無法連接Redis
① 設置redis.conf
② 測試連通性
通過上圖可以看出:由于綁定了本地回環地址,隻能本地連接,所以客戶端在連接redis的時候被拒了。驗證通過,與期望結果一緻。
6.綁定本地回環地址、關閉保護模式-無法連接Redis① 設置redis.conf
② 測試連通性
通過上圖可以看出:由于綁定了本地回環地址,隻能本地連接,所以客戶端在連接redis的時候被拒了。驗證通過,與期望結果一緻。
小結更多幹貨,歡迎WX關注【測試開發實戰】
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!