Redis benchmark đánh giá hiệu suất và khả năng mở rộng của Redis

Nội dung bài viết

Video học lập trình mỗi ngày

Anh ơi làm sao chúng ta biết được redis có thể connect được bao nhiêu Users đồng thời? Khi nào redis quá tải... Xem xét những tình huống sau.

Redis benchmark là gì?

Redis benchmark một kỹ thuật giúp những lập trình viên có thể có thể sử dụng để mô phỏng một số lượng khách hàng tùy ý kết nối cùng một lúc và thực hiện các hành động trên máy chủ, xác định được thời gian hoàn thành các nhiệm vụ.

Theo mặc định, khi chúng ta install redis thì sẵn có luôn công cụ redis-benchmark . Nó tương tự như tiện ích ab của Apache mà tôi đã trình bày trong những bài viết or những video trước đây. Đa số những công cụ benchmark đều sử dụng để mô phỏng một số khách hàng gửi tổng số truy vấn đồng thời trong một thời gian nhất định.

Trong bài này chúng ta sẽ xem một số thao tác cơ bản về Redis benchmark dưới đây.

Thao tác cơ bản Redis benchmark

Đầu tiên như các cli khác thì chúng ta sẽ xem có những thao tác được hỗ trợ gì và kết quả như sau.

> redis-benchmark --help

Bạn sẽ thấy kết quả như sau:

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)
 -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 3)
 --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).
 -e                 If server replies with errors, show them on stdout.
                    (no more than 1 error per second is displayed)
 -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.

Bây giờ ví dụ nếu bạn muốn kiểm tra số lượng yêu cầu trung bình mỗi giây mà máy chủ Redis cục bộ của bạn có thể xử lý, bạn có thể sử dụng câu lệnh dưới đây:

> redis-benchmark -q

Bạn sẽ nhận được đầu ra tương tự như thế này, nhưng với các số khác nhau tùy theo mỗi máy :

PING_INLINE: 68917.99 requests per second, p50=0.303 msec
PING_MBULK: 72202.16 requests per second, p50=0.303 msec
SET: 68681.32 requests per second, p50=0.303 msec
GET: 67385.45 requests per second, p50=0.303 msec
INCR: 66666.66 requests per second, p50=0.303 msec
LPUSH: 74349.44 requests per second, p50=0.303 msec
RPUSH: 65573.77 requests per second, p50=0.303 msec
LPOP: 72202.16 requests per second, p50=0.303 msec
RPOP: 61996.28 requests per second, p50=0.327 msec
SADD: 72780.20 requests per second, p50=0.303 msec
HSET: 70921.98 requests per second, p50=0.319 msec
SPOP: 68681.32 requests per second, p50=0.303 msec
ZADD: 72150.07 requests per second, p50=0.311 msec
ZPOPMIN: 73855.24 requests per second, p50=0.295 msec
LPUSH (needed to benchmark LRANGE): 76277.65 requests per second, p50=0.303 msec
LRANGE_100 (first 100 elements): 21649.71 requests per second, p50=1.039 msec
LRANGE_300 (first 300 elements): 9317.93 requests per second, p50=2.503 msec
LRANGE_500 (first 500 elements): 5883.74 requests per second, p50=3.975 msec
LRANGE_600 (first 600 elements): 4876.62 requests per second, p50=4.807 msec
MSET (10 keys): 39231.07 requests per second, p50=0.799 msec

Nhìn vào nếu các bạn đã sử dụng redis thì không lạ với những tính năng như là get, set... Qua đó chúng ta có thể thấy hiệu suất khi chúng làm việc như thế nào?

Ngoài ra, bạn có thể chạy các ứng dụng khách song song thông qua những options như -n-c tương đương là lượng request và số lượng người dùng đồng thời. Ví dụ sau sử dụng 20 máy khách song song với tổng số 100 nghìn yêu cầu:

> redis-benchmark -q -n 100000 -c 20

Ngoài ra có nhiều options và nhiều tình huống cho những lập trình viên có thể mở rộng thêm những kỹ năng về xử lý hệ thống thông qua redis-benchmark.

Có thể bạn đã bị missing