Java開發大型互聯網深入理解Redis性能調優之redis性能測試

引言

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。

簡介

Redis的優點

性能極高 – Redis能支持超過 100K+ 每秒的讀寫頻率。

豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。

原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並後的原子性執行。

豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

redis數據結構

redis是一種高級的key:value存儲系統,其中value支持五種數據類型:

字符串(strings)

字符串列表(lists)

字符串集合(sets)

有序字符串集合(sorted sets)

哈希(hashes)

而關於key,有幾個點要提醒大家:

key不要太長,儘量不要超過1024字節,這不僅消耗內存,而且會降低查找的效率;

key也不要太短,太短的話,key的可讀性會降低;

在一個項目中,key最好使用統一的命名模式,例如user:10000:passwd。

安裝redis

從redis.io下載最新版redis-X.Y.Z.tar.gz後解壓,然後進入redis-X.Y.Z文件夾後直接make即可,安裝非常簡單。

make成功後會在src文件夾下產生一些二進制可執行文件,包括redis-server、redis-cli等等:

$ find . -type f -executable

./redis-benchmark //用於進行redis性能測試的工具

./redis-check-dump //用於修復出問題的dump.rdb文件

./redis-cli //redis的客戶端

./redis-server //redis的服務端

./redis-check-aof //用於修復出問題的AOF文件

./redis-sentinel //用於集群管理

啟動redis

啟動redis非常簡單,直接./redis-server就可以啟動服務端了,還可以用下面的方法指定要加載的配置文件:

./redis-server ../redis.conf

默認情況下,redis-server會以非daemon的方式來運行,且默認服務端口為6379。

有關作者為什麼選擇6379作為默認端口,還有一段有趣的典故,英語好的同學可以看看作者這篇博文中的解釋。

使用redis客戶端

我們直接看一個例子:

//這樣來啟動redis客戶端了

$ ./redis-cli

//用set指令來設置key、value

127.0.0.1:6379> set name "roc"

OK

//來獲取name的值

127.0.0.1:6379> get name

"roc"

//通過客戶端來關閉redis服務端

127.0.0.1:6379> shutdown

127.0.0.1:6379>

Redis性能調優

儘管Redis是一個非常快速的內存數據存儲媒介,也並不代表Redis不會產生性能問題。

前文中提到過,Redis採用單線程模型,所有的命令都是由一個線程串行執行的,所以當某個命令執行耗時較長時,會拖慢其後的所有命令,這使得Redis對每個任務的執行效率更加敏感。

針對Redis的性能優化,主要從下面幾個層面入手:

最初的也是最重要的,確保沒有讓Redis執行耗時長的命令

使用pipelining將連續執行的命令組合執行

操作系統的Transparent huge pages功能必須關閉:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

如果在虛擬機中運行Redis,可能天然就有虛擬機環境帶來的固有延遲。可以通過./redis-cli --intrinsic-latency 100命令查看固有延遲。同時如果對Redis的性能有較高要求的話,應儘可能在物理機上直接部署Redis。檢查數據持久化策略,考慮引入讀寫分離機制。

.

Redis性能測試.

基準測試

基準的測試命令:

redis-benchmark -q -n 100000

結果入下:

root@centos1 bin]# redis-benchmark -q -n 100000

-bash: redis-benchmark: command not found

[root@centos1 bin]# ./redis-benchmark -q -n 100000

PING_INLINE: 61576.36 requests per second

PING_BULK: 60277.28 requests per second

SET: 61349.69 requests per second

GET: 60459.49 requests per second

INCR: 58858.15 requests per second

LPUSH: 59066.75 requests per second

RPUSH: 57339.45 requests per second

LPOP: 55586.44 requests per second

RPOP: 56465.27 requests per second

SADD: 57045.07 requests per second

SPOP: 53734.55 requests per second

LPUSH (needed to benchmark LRANGE): 57012.54 requests per second

LRANGE_100 (first 100 elements): 55803.57 requests per second

LRANGE_300 (first 300 elements): 54914.88 requests per second

LRANGE_500 (first 450 elements): 53333.33 requests per second

LRANGE_600 (first 600 elements): 56529.11 requests per second

MSET (10 keys): 59276.82 requests per second

這裡可以看出,單機版的redis每秒可以處理6萬個請求,這已經是一個非常厲害的數據了,不得不佩服

我們再來看下集群情況下是是什麼情況

[root@centos1 bin]# ./redis-benchmark -q -n 100000 -p 7000

PING_INLINE: 64599.48 requests per second

PING_BULK: 64184.85 requests per second

SET: 66800.27 requests per second

GET: 65616.80 requests per second

INCR: 66269.05 requests per second

LPUSH: 40273.86 requests per second

RPUSH: 40355.12 requests per second

LPOP: 43421.62 requests per second

RPOP: 45187.53 requests per second

SADD: 62539.09 requests per second

SPOP: 61538.46 requests per second

LPUSH (needed to benchmark LRANGE): 38182.51 requests per second

LRANGE_100 (first 100 elements): 25555.84 requests per second

LRANGE_300 (first 300 elements): 9571.21 requests per second

LRANGE_500 (first 450 elements): 7214.49 requests per second

LRANGE_600 (first 600 elements): 5478.85 requests per second

MSET (10 keys): 41893.59 requests per second

總結

以 上就是我對Java開發大型互聯網深入理解Redis性能調優之redis性能測試問題及其優化總結,分享給大家,希望大家知道什麼是Java開發大型互聯網深入理解Redis性能調優之redis性能測試問題及其優化。覺得收穫的話可以點個關注收藏轉發一波喔,謝謝大佬們支持!

  • 1、多寫多敲代碼,好的代碼與紮實的基礎知識一定是實踐出來的

  • 2、可以去百度搜索騰訊課堂圖靈學院的視頻來學習一下java架構實戰案例,還挺不錯的。

  • 最後,每一位讀到這裡的網友,感謝你們能耐心地看完。希望在成為一名更優秀的Java程序員的道路上,我們可以一起學習、一起進步!都能贏取白富美,走向架構師的人生巔峰!

  • 3丶想了解學習以上課程內容可加群:469717771 驗證碼頭條(06 必過)歡迎大家的加入喲!

Java開發大型互聯網深入理解Redis性能調優之redis性能測試

相關推薦

推薦中...