Benchmarking Redis

Benchmarking Redis

November 18 2010

2 months ago I started working on an ORM for Redis a key-value database. Now I am about to rewrite parts of it because I didn't test and measure everything beforehand.

This time I decided to measure the performance of the different Redis commands. I want to be sure that any optimizations I might implement really helps.

A Redis database is a big mapping. Its keys are strings and the values can be strings, lists, sets, ordered sets, and hashes. Here I’ll just consider strings and hashes. The 2 types of commands I'm interested in are:

  • Set commands: SET, MSET, HMSET, and HSET.
  • Get commands: GET, MGET, HMGET, and HGET.

The command prefixed by H are for hashes, the ones without prefix are for regular strings. Commands with an M are the ones that can set or get multiple values. To learn more about how Redis works check out the documentation.

I wrote a little script to test how fast the different commands are depending on the number of items to write or read for each operation. I configured Redis to use the Append-only-file like this:

appendonly yes

appendfsync always

Write operations will surely be faster without it. but that's how I use Redis. I do this because I don’t want to lose data, ever!

Here are the results:

Times are in micro-seconds per items

Read

Elements

GET

HGET

MGET

HMGET

1

167.25

163.04

216.26

203.46

2

164.99

161.72

112.71

109.85

10

156.37

157.34

35.41

33.73

100

156.26

164.23

22.31

19.31

1000

175.82

161.74

31.10

29.56

Write

Elements

SET

HSET

MSET

HMSET

1

816.10

851.05

887.86

902.71

2

908.21

939.67

560.31

587.40

10

965.12

983.00

218.81

227.05

100

945.03

1037.13

120.09

110.63

1000

897.69

901.27

106.49

101.37

Hash operations are a little bit faster than the ones on strings, probably because there are fewer keys in a hash than in the full Redis mapping. The difference is not too significant though.

*SET operations are faster than *MSET operations for a single element, and for 2 elements or more *MSET operations are faster. No surprise here. But something worth noting is that *MSET operations are MUCH faster than *SET operations with 2 or more elements. They can be as much as 5 times faster when reading and 9 times faster when writing. Something to keep in mind when you have to update 5000 keys in a single batch.

posted on 2013-06-04 10:29  Bo.Zhang  阅读(189)  评论(0)    收藏  举报