Redis測試

以下是 Redis 測試 的詳細步驟和方法,涵蓋功能驗證、性能測試、高可用性測試和安全測試,適用于開發(fā)、運維和測試人員全面評估 Redis 的穩(wěn)定性和性能。

一、測試目標

功能驗證:確保 Redis 的基本功能(如字符串、哈希、列表、集合、有序集合)正常工作。

性能測試:評估 Redis 在高并發(fā)、大規(guī)模數(shù)據(jù)場景下的吞吐量和延遲。

高可用性測試:驗證主從復(fù)制、哨兵模式、集群模式的故障轉(zhuǎn)移能力。

持久化測試:確保 RDB 和 AOF 持久化機制在重啟后數(shù)據(jù)不丟失。

安全測試:驗證密碼保護、訪問控制等安全策略的有效性。

二、測試環(huán)境準備

安裝 Redis

單節(jié)點測試:redis-server(默認端口 6379)。

集群測試:配置主從復(fù)制、哨兵模式或 Redis Cluster。

工具準備

Redis 命令行工具:redis-cli

性能測試工具:redis-benchmark

自動化測試工具:Python(redis-py)、JMeter

監(jiān)控工具:redis-cli info、redis-stat、Prometheus + Grafana

三、功能測試

1. 基本數(shù)據(jù)類型測試

步驟

字符串類型

哈希類型

列表類型

集合類型

有序集合類型

驗證方法

檢查返回值是否符合預(yù)期(如 OK、1 表示成功)。

使用 redis-cli type <key> 驗證數(shù)據(jù)類型。

2. 過期時間測試

步驟

驗證方法

等待過期時間后,GET 命令應(yīng)返回 nil。

3. 事務(wù)測試(MULTI/EXEC)

步驟

驗證方法

事務(wù)中的所有命令應(yīng)按順序執(zhí)行,結(jié)果一致。

四、性能測試

1. 使用 redis-benchmark 測試

步驟

單線程測試

多線程測試

參數(shù)說明

-n:請求總數(shù)。

-c:并發(fā)客戶端數(shù)。

-t:測試命令(如 set,get)。

-P:管道化請求數(shù)。

-k:是否啟用 Keepalive(1 表示啟用)。

驗證方法

觀察吞吐量(requests per second)和平均延遲(latency)。

比較不同并發(fā)數(shù)下的性能差異。

2. 使用 JMeter 測試

步驟

添加 TCP 請求,配置 Redis 的 IP 和端口。

使用 CSV 數(shù)據(jù)文件 提供測試數(shù)據(jù)(如 key1, key2)。

添加 監(jiān)聽器(如 View Results Tree、Aggregate Report)。

運行測試并分析結(jié)果。

五、高可用性測試

1. 主從復(fù)制測試

步驟

配置主從節(jié)點(redis.conf 中添加 slaveof <master-ip> 6379)。

在主節(jié)點寫入數(shù)據(jù):

在從節(jié)點讀取數(shù)據(jù):

驗證方法

從節(jié)點應(yīng)同步主節(jié)點的數(shù)據(jù)。

使用 INFO replication 檢查復(fù)制狀態(tài)。

2. 哨兵模式測試(故障轉(zhuǎn)移)

步驟

配置哨兵模式(sentinel.conf)。

模擬主節(jié)點故障(關(guān)閉主節(jié)點進程)。

檢查哨兵是否自動選舉新的主節(jié)點。

在客戶端連接哨兵地址,驗證讀寫是否正常。

驗證方法

使用 redis-cli -h sentinel -p 26379 info sentinel 查看故障轉(zhuǎn)移狀態(tài)。

3. 集群模式測試

步驟

使用 redis-cli --cluster create 創(chuàng)建集群。

向不同節(jié)點寫入數(shù)據(jù):

模擬節(jié)點故障(關(guān)閉某個節(jié)點),觀察數(shù)據(jù)是否自動遷移。

驗證方法

使用 CLUSTER NODES 檢查節(jié)點狀態(tài)和槽位分配。

六、持久化測試

1. RDB 持久化測試

步驟

配置 redis.conf:

寫入數(shù)據(jù)并等待觸發(fā) RDB 快照。

停止 Redis 服務(wù)并重啟,檢查數(shù)據(jù)是否恢復(fù)。

驗證方法

使用 redis-cli keys * 驗證數(shù)據(jù)是否保留。

2. AOF 持久化測試

步驟

配置 redis.conf:

寫入數(shù)據(jù)并檢查 AOF 文件大小。

停止 Redis 服務(wù)并重啟,檢查數(shù)據(jù)是否恢復(fù)。

驗證方法

使用 redis-check-aof 工具驗證 AOF 文件完整性。

七、安全測試

1. 密碼保護測試

步驟

配置 redis.conf:

使用 redis-cli 連接并嘗試未授權(quán)訪問:

使用密碼連接:

驗證方法

未授權(quán)訪問應(yīng)返回 -NOAUTH 錯誤。

2. 訪問控制測試(ACL)

步驟

配置 ACL 用戶(redis.conf 或 ACL SETUSER 命令)。

使用不同用戶權(quán)限測試讀寫操作。

檢查是否限制了特定命令或數(shù)據(jù)庫。

驗證方法

低權(quán)限用戶應(yīng)無法執(zhí)行高危命令(如 FLUSHALL)。

八、監(jiān)控與日志分析

實時監(jiān)控

日志分析

檢查 redis-server 日志文件(默認 redis.log)。

使用 grep 過濾錯誤或警告信息。

九、測試報告示例

測試類型 結(jié)果 備注

基本功能測試 通過 所有數(shù)據(jù)類型操作正常

性能測試(100并發(fā)) 吞吐量 100k/s 平均延遲 0.5ms

主從復(fù)制測試 通過 從節(jié)點同步主節(jié)點數(shù)據(jù)

AOF 持久化測試 通過 重啟后數(shù)據(jù)完整恢復(fù)

十、注意事項

生產(chǎn)環(huán)境測試:避免在生產(chǎn)環(huán)境中直接運行高負載測試,建議使用測試集群。

數(shù)據(jù)隔離:測試數(shù)據(jù)應(yīng)與生產(chǎn)數(shù)據(jù)隔離,使用獨立的 Redis 實例或數(shù)據(jù)庫。

工具選擇:根據(jù)測試目標選擇合適的工具(如 redis-benchmark 用于性能測試,redis-cli 用于功能驗證)。

通過以上步驟和方法,可以全面驗證 Redis 的功能、性能和高可用性,確保其在生產(chǎn)環(huán)境中的穩(wěn)定運行。

Redis有幾種基礎(chǔ)數(shù)據(jù)類型:

1,string

2,hash哈希

3,list列表

4,set集合

5,zset有序集合

二,Redis緩存測什么

Redis緩存測試主要測試功能和性能兩個方面

1,功能方面

1.1,測試點:

緩存中有緩存數(shù)據(jù),正確獲取緩存數(shù)據(jù)

在緩存中增加數(shù)據(jù),刪除數(shù)據(jù),redis中緩存數(shù)據(jù)正確

緩存中沒有緩存數(shù)據(jù),redis從DB正確獲取到緩存數(shù)據(jù),并儲存再redis中,然后返回正確的響應(yīng)到客戶端

緩存數(shù)據(jù)過期,redis重新獲取DB緩存數(shù)據(jù),并正確反映到客戶端

緩存數(shù)據(jù)的過期時間正常生效,過期時間內(nèi),獲取緩存數(shù)據(jù),沒有到DB的請求,過期后,redis沒有緩存數(shù)據(jù)了

如果是刪除緩存數(shù)據(jù)的設(shè)計,需要測試緩存數(shù)據(jù)響應(yīng)到客戶端以后,redit中緩存數(shù)據(jù)被刪除

緩存到達上限,如何處理

2,性能測試

2.1,測試點:

redis停止服務(wù),業(yè)務(wù)是否正常

redis緩存擊穿,大量訪問redis中不存在的值,會到DB去查詢

redis緩存雪崩,在同一時間大量的緩存過期,對DB造成巨大訪問壓力

緩存數(shù)據(jù)到達上限,業(yè)務(wù)表現(xiàn)是什么,超量淘汰機制

緩存數(shù)據(jù)出問題時,redis數(shù)據(jù)能否正確快速回復(fù)數(shù)據(jù)

redis服務(wù)斷開后回復(fù),業(yè)務(wù)流程是否正常回復(fù)到redis查詢

三,Redis怎么測

1,純基礎(chǔ)功能的測試,比如緩存讀寫的正確性,過期時間等,可以自己搭建本地的redis數(shù)據(jù)庫來測試,不影響其他環(huán)境

測試點:

鍵值對 CRUD:SET寫入后GET是否正確,DEL后是否刪除;

數(shù)據(jù)結(jié)構(gòu)操作:Hash 的HSET/HGET、List 的LPUSH/LRANGE、Set 的SADD/SMEMBERS等是否符合預(yù)期;

過期時間:設(shè)置EX/PX后,TTL是否正確,過期后是否無法讀??;

覆蓋行為:對已存在的鍵SET新值,是否覆蓋舊值,過期時間是否重置。

2,驗證業(yè)務(wù)系統(tǒng)和redis的集成效果(比如緩存更新邏輯,緩存穿透,緩存雪崩等),需要用專門的測試環(huán)境

通常是運維團隊搭建,與開發(fā)的業(yè)務(wù)系統(tǒng)配套,規(guī)模比較小。

測試時,問開發(fā)要連接信息:主機地址,端口,密碼,專用于測試的數(shù)據(jù)庫的編號

登錄redis: cmd命令:redis-cli -h 主機地址 -p 端口 -a 密碼 -n 數(shù)據(jù)庫編號

登錄后,使用redis命令來測試

3,UAT環(huán)境管理比較嚴,要注意數(shù)據(jù)清理,避免批量處理數(shù)據(jù),測試完要清理數(shù)據(jù),要和運維確認有數(shù)據(jù)備份

4,自動化測試的話,用python的redis-py庫來做

點擊查看代碼

沒有python環(huán)境的話,用shell腳本實現(xiàn)自動化測試redis

點擊查看代碼

5,redis可視化結(jié)果檢查:用redis desktop manager RDM工具來查看

6,redis的性能測試工具 redis-benchmark自帶工具,命令是:

(測試100個并發(fā)連接,共100000次請求的GET/SET性能)

redis-benchmark -h redis-test.example.com -p 6379 -a test123 -c 100 -n 100000 get set

輸出結(jié)果會包含QPS,平均響應(yīng)時間等

2、Redis功能測試角度

redis數(shù)據(jù)生效時,讀取是否正確

redis數(shù)據(jù)不存在,能否正常從db中讀取到正確的值,并正確寫入Redis和返回給上層

數(shù)據(jù)在redis和db中都不存在時的表現(xiàn)是否正常

刪除數(shù)據(jù)時,redis和db的數(shù)據(jù)是否一致

緩存增加/更新功能是否正確,查看緩存數(shù)據(jù)是否正確

增加相關(guān)日志,查看日志

后門接口工具

使用命令行,memcached和reids可以登錄后,直接查看

緩存刪除

緩存有效,驗證相關(guān)業(yè)務(wù)功能

緩存被刪除,驗證相關(guān)業(yè)務(wù)功能

緩存過期失效,memcached 和redis 可以設(shè)置失效時間,查看失效時間有沒有,對不對

超量淘汰機制:緩存達到上限怎么處理

緩存穿透

緩存雪崩

redis緩存服務(wù)停掉

緩存超時

緩存數(shù)據(jù)被誤修改后,快速恢復(fù)到指定版本

緩存數(shù)據(jù)被誤刪除后,快速恢復(fù)數(shù)據(jù)

性能測試關(guān)鍵指標

Redis 性能測試關(guān)注在不同負載下的表現(xiàn),主要考察以下指標:

吞吐量(Throughput, QPS):單位時間內(nèi)處理的請求數(shù)(一般指每秒查詢數(shù) QPS)。這是衡量 Redis 性能的核心指標之一,多數(shù)文檔和廠商給出的 Redis 性能規(guī)格都是以 QPS 表示。

響應(yīng)時間(Latency):每次操作的延遲,通常統(tǒng)計平均延遲(Avg)、百分位延遲(如 p50、p95、p99)等。面試時可提到關(guān)注中位延遲和尾延遲,以評估系統(tǒng)穩(wěn)定性。

并發(fā)能力:Redis 能夠同時支持的并發(fā)客戶端數(shù)或并發(fā)連接數(shù)。可以通過壓測工具設(shè)置并發(fā)數(shù) (-c 參數(shù)) 測試系統(tǒng)在高并發(fā)下的性能。

資源使用情況:監(jiān)控 CPU 使用率、內(nèi)存占用、網(wǎng)絡(luò)帶寬等。尤其在高負載時,需要關(guān)注 Redis 進程是否因資源瓶頸而限制性能。

負載穩(wěn)定性:在長時間或循環(huán)壓測下,觀察性能是否下降(如因為 AOF 重寫、內(nèi)存碎片化、GC 等導(dǎo)致的延遲波動)。

實際測試時,可模擬不同場景:冷啟動(空緩存)和熱啟動(緩存預(yù)熱)下的性能對比;使用不同大小的數(shù)據(jù);并發(fā)客戶端逐漸加壓等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容