参考《Redis In Action》:
1、Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。 (类似于 Apache ab 程序)。你可以使用 redis-benchmark -h 来查看基准参数。
redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
2、针对Redis的性能优化,主要从下面几个层面入手:
(1)、最初的也是最重要的,确保没有让Redis执行耗时长的命令
a、输入slowlog get命令查看,返回结果的第三个字段以微妙位单位显示命令的执行时间。假如只需要查看最后10个慢命令,输入slowlog get 10即可:
b、避免在使用这些O(N)命令时发生问题主要有几个办法:
(a)不要把List当做列表使用,仅当做队列来使用
(b)通过机制严格控制Hash、Set、Sorted Set的大小
(c)可能的话,将排序、并集、交集等操作放在客户端执行
(d)绝对禁止使用KEYS命令
(e)避免一次性遍历集合类型的所有成员,而应使用SCAN类的命令进行分批的,游标式的遍历
(2)、使用pipelining将连续执行的命令组合执行;
(3)、操作系统的Transparent huge pages功能必须关闭;
(4)数据持久化引发的延迟
Redis的数据持久化工作本身就会带来延迟,需要根据数据的安全级别和性能要求制定合理的持久化策略:
(5)Swap引发的延迟
当Linux将Redis所用的内存分页移至swap空间时,将会阻塞Redis进程,导致Redis出现不正常的延迟。Swap通常在物理内存不足或一些进程在进行大量I/O操作时发生,应尽可能避免上述两种情况的出现。
(6)数据淘汰引发的延迟
当同一秒内有大量key过期时,也会引发Redis的延迟。在使用时应尽量将key的失效时间错开。
(7)引入读写分离机制
Redis的主从复制能力可以实现一主多从的多节点架构,在这一架构下,主节点接收所有写请求,并将数据同步给多个从节点。
在这一基础上,我们可以让从节点提供对实时性要求不高的读请求服务,以减小主节点的压力。
尤其是针对一些使用了长耗时命令的统计类任务,完全可以指定在一个或多个从节点上执行,避免这些长耗时命令影响其他请求的响应。