【Azure Redis 快取 Azure Cache For Redis】使用Redis自帶redis-benchmark.exe命令測試Azure Redis的效能
問題描述
關於Azure Redis的效能問題,在官方文件中,可以檢視到不同層級Redis的最大連線數,每秒處理請求的效能。
基本快取和標準快取
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
高階快取
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
但以上的資料只是官方釋出的資料,如果在排除業務的情況下,如何單獨對Redis伺服器進行測試呢?如果需要驗證Redis的效能,如何來做呢?
答案就是使用redis-benchmark.exe,在Azure Redis的常規問答中,有簡單的提到如何來做效能測試,但只是一句話,一個命令一晃而過。
如何進行基準檢驗和測試快取的效能?
- 啟用快取診斷,以便可以監視快取的執行狀況。 可以在 Azure 門戶中檢視指標,也可以使用所選的工具下載和檢視這些指標。
- 可以使用 redis-benchmark.exe 對 Redis 伺服器進行負載測試。
- 確保負載測試客戶端和 Azure Redis 快取位於同一區域。
- 使用 redis-cli.exe,並使用 INFO 命令監視快取。
- 如果負載導致出現大量記憶體碎片,則你應該擴充套件為更大的快取大小。
- 有關下載 Redis 工具的說明,請參閱如何執行 Redis 命令?部分。
本章的內容就是從下載Redis-benchmark.exe開始,到使用命令完成測試。
一:下載Redis-benchmark.exe
在Github中找到Redis:https://github.com/microsoftarchive/redis/releases,下載最新的ZIP包並解壓( 如:Redis-x64-3.2.100.zip)
二:使用Azure Reids的訪問金鑰開啟測試
從Azure的Redis門戶中複製出連線字串,把redis name和access key填充到如下命令
redis-benchmark.exe -h **yourcache**.redis.cache.chinacloudapi.cn -a **yourAccesskey** -c 10 -n 10
以上命令只是簡單的發起一輪預設命令的測試(如ping,set,get,pop,push等),-c表示10個併發,-n表示10個請求。
在本機中執行redis-benchmark命令測試:
同時,我們也可以使用-t來指定用於測試的操作,如set,get。參考命令如下:
redis-benchmark.exe -h **yourcache**.redis.cache.chinacloudapi.cn -a **yourAccesskey** -t SET -n 1000000 -d 1024 -P 50 redis-benchmark.exe -h **yourcache**.redis.cache.chinacloudapi.cn -a **yourAccesskey** -t GET -n 1000000 -d 1024 -P 50
如需要使用SSL對Azure Redis進行6380埠的效能測試,則需要先確保本地安裝了stunnel.exe並配置好redis-cli客戶端資訊
- 下載stunnel.exe
- 啟動並配置redis-cli連線 (https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-redis-cli-tool#enable-access-for-redis-cliexe)
- 使用redis-cli確認是否已經連線
- 如能成功訪問到6380埠,則可以使用如下命令開始測試
redis-benchmark.exe -a **your access key** -c 10 -n 10 -p 6380
測試的效果對比如下
6379 非SSL測試 | 6380 SSL測試 |
C:\redis>redis-benchmark.exe -h yourredisname.redis.cache.chinacloudapi.cn -a **youraccesskey** -c 10 -n 10 10.00% <= 198 milliseconds ====== PING_BULK ====== 10.00% <= 198 milliseconds ====== SET ====== 10.00% <= 198 milliseconds ====== GET ====== 10.00% <= 205 milliseconds ====== INCR ====== 10.00% <= 197 milliseconds ====== LPUSH ====== 10.00% <= 199 milliseconds ====== RPUSH ====== 10.00% <= 197 milliseconds ====== LPOP ====== 10.00% <= 198 milliseconds ====== RPOP ====== 10.00% <= 200 milliseconds ====== SADD ====== 10.00% <= 196 milliseconds ====== SPOP ====== 10.00% <= 203 milliseconds ====== LPUSH (needed to benchmark LRANGE) ====== 10.00% <= 203 milliseconds ====== LRANGE_100 (first 100 elements) ====== 10.00% <= 198 milliseconds ====== LRANGE_300 (first 300 elements) ====== 10.00% <= 196 milliseconds ====== LRANGE_500 (first 450 elements) ====== 10.00% <= 196 milliseconds ====== LRANGE_600 (first 600 elements) ====== 10.00% <= 199 milliseconds ====== MSET (10 keys) ====== 10.00% <= 202 milliseconds |
C:\redis>redis-benchmark.exe -a **youraccesskey** -c 10 -n 10 -p 6380 10.00% <= 597 milliseconds ====== PING_BULK ====== 10.00% <= 646 milliseconds ====== SET ====== 10.00% <= 628 milliseconds ====== GET ====== 10.00% <= 618 milliseconds ====== INCR ====== 10.00% <= 612 milliseconds ====== LPUSH ====== 10.00% <= 616 milliseconds ====== RPUSH ====== 10.00% <= 587 milliseconds ====== LPOP ====== 10.00% <= 644 milliseconds ====== RPOP ====== 10.00% <= 687 milliseconds ====== SADD ====== 10.00% <= 636 milliseconds ====== SPOP ====== 10.00% <= 607 milliseconds ====== LPUSH (needed to benchmark LRANGE) ====== 10.00% <= 614 milliseconds ====== LRANGE_100 (first 100 elements) ====== 10.00% <= 573 milliseconds ====== LRANGE_300 (first 300 elements) ====== 10.00% <= 630 milliseconds ====== LRANGE_500 (first 450 elements) ====== 10.00% <= 572 milliseconds ====== LRANGE_600 (first 600 elements) ====== 10.00% <= 566 milliseconds ====== MSET (10 keys) ====== 10.00% <= 606 milliseconds |
PS: 在SSL的情況下,每秒處理請求的能下有明顯的下降。
三:對Redis Benchmark命令中攜帶引數的介紹
Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
-h <hostname> Server hostname (default 127.0.0.1) -p <port> Server port (default 6379)//預設情況下,都使用6379埠,因Azure Redis預設只開通了6380埠,進行SSL通訊。所以需要在Azure Redis門戶中允許6379埠的非SSL訪問。 -s <socket> Server socket (overrides host and port) -a <password> Password for Redis Auth -c <clients> Number of parallel connections (default 50) -n <requests> Total number of requests (default 100000) -d <size> Data size of SET/GET value in bytes (default 2) --dbnum <db> SELECT the specified db number (default 0) -k <boolean> 1=keep alive 0=reconnect (default 1) -r <keyspacelen> Use random keys for SET/GET/INCR, random values for SADD Using this option the benchmark will expand the string __rand_int__ inside an argument with a 12 digits number in the specified range from 0 to keyspacelen-1. The substitution changes every time a command is executed. Default tests use this to hit random keys in the specified range. -P <numreq> Pipeline <numreq> requests. Default 1 (no pipeline). -q Quiet. Just show query/sec values --csv Output in CSV format -l Loop. Run the tests forever -t <tests> Only run the comma separated list of tests. The test names are the same as the ones produced as output. -I Idle mode. Just open N idle connections and wait.
參考資料:
Redis Release: https://github.com/microsoftarchive/redis/releases
如何進行基準檢驗和測試快取的效能: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-management-faq#how-can-i-benchmark-and-test-the-performance-of-my-cache
How fast is Redis: https://redis.io/topics/benchm