在互聯網行業大多數的應該系統都是分步式系統。並且爲了優化系統,在架構設計的時候大多數都引入了緩存中間件 – Redis。相對於 memcache 緩存中間件只支持字符串類型, Redi 擁有更多的數據類型。
- string:字符串是一種基本的數據類型,用於保存 key/value 類型的數據
- hash:哈希是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象
- list:列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)
- set:集合是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重複的數據。
- sorted sets:有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。
一般情況下 Redis 可用於使用於以下應用場景
:
- 緩存
- count – 計數
- 展示最近、最熱、點擊率最高、活躍度最高等等條件的 Top List
- 用戶最近訪問記錄也是 Redis List 很好的應用場景
- 通過 List 和 lpop 及 lpush 接口進行隊列的寫入與消費
- Redis 的 Lua 的功能擴展實際給 Redis 帶來了更多的應用場景,可以編寫若干 command 組合作爲一個小型的非阻塞事務或者更新邏輯
- Redis 提供的主從數據同步功能,其實是對 cache 的一個強有力功能的擴展
Redis 在系統中有這麼多的就用場景那麼在上線之前我們應該對 Redis 進行性能測試,這樣才能讓 Redis 在不同的服務器上能夠更好的爲我們的服務服務。
在我們 Redis 安裝成功之後,在 ${redis_home}/src 目錄中一般會包含以下命令:
- redis-server:redis 服務器啓動命令
- redis-cli:redis 連接連接服務器的客戶端命令
- redis-benchmark:redis 性能檢測命令
其它的我們暫時不討論,今天主要的討論的就是 redis-benchmark
這個 redis 性能檢測命令。我們輸出redis-benchmark --help
,就可以查看它的幫助命令。並且它還會給我們一些舉例:
裏面的單詞比較簡單我就不做過多介紹了,下面就以我的 mac 爲例爲大家舉例幾個比較常用的檢測,以下就是我的電腦配置:
下面就爲大家舉例如何使用 Redis 做性能壓力測試:
1 所有數據的壓力測試
可以使用以下命令對 Redis 所有的數據類型做壓力測試:
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
這個命令的意思:檢測服務器 127.0.0.1:6379
,100 個併發連接,100000 個請求,檢測服務器性能。
控制檯會打印以上信息主要包括以下幾個點:
- 需要壓力測試的命令
- 100000 個命令執行時間所佔的百分比
- 每秒鐘可以處理多少個請求
2、固定數據大小的測試
測試存儲大小爲 100 kb 的數據包的性能
redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100
以下是測試結果:
大多數每秒處理數據在 10 萬以上。哈哈,看來我的電腦性能還不錯。
3、針對特定命令測試
在大多數系統當中,我們只會使用到比如 get/set 的命令,那麼我們在做性能測試的時候就只需要對 get/set 命令進行性能測試就可以了。
redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 100000 -q
以下就是測試結果:
在控制檯只會打印 get/set 命令每秒鐘能夠處理多少個請求。
4、利用 Lua 腳本測試
Redis 在做性能壓力測試的時候,同樣也可以使用 Lua 腳本。
redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -q script "redis.call('set', 'foo', 'bar')"
上面的測試目的只是測試某些數據的存儲性能 。
以下就是控制檯的打印:
當然這裏只是羅列了幾個場景,大家可以根據自己的業務場景進行 Redis 的性能壓力測試。