简介:
redis 本质上是一个高性能的 Key,Value 数据库;支持存储的类型相对更多;(String、list、set、hash);典型的非关系型数据库,不用写sql语句的数据库;(在高并发的时候对关系型数据库起到一个很好的补充作用)port:6379
启动Redis 服务:redis-server
打开Redis客户端:redis-cli
一、Redis-benchmark 使用介绍
1、100个并发连接,100000个请求,检测localhost 端口为6379的redis服务器性能
redis-benchmark -h127.0.0.1-p 6379 -c 100 -n 100000
2、redis-benchmark -h192.168.1.201-p 6379 -q -d 100
测试存取大小为100字节的数据包的性能
3、redis-benchmark -t set,lpush -n 100000 -q
只测试某些操作的性能
4、redis-benchmark -n 100000 -q script load "redis.call('set','foo','bar')"
只测试某些数值存取的性能
5、redis-benchmark -h127.0.0.1-p 6379 -c 50 -n 100000-d 100 -q
SET/GET 100 bytes 50个并发连接,100000个请求,检测host为127.0.0.1端口为6379的redis服务器性能
====== PING_INLINE ======
100000 requests completed in 1.80 seconds
60 parallel clients
3 bytes payload
keep alive: 1
98.27%
99.90%
100.00%
100.00%
55648.30 requests per second
====== PING_BULK ======
100000 requests completed in 1.98 seconds
60 parallel clients
3 bytes payload
keep alive: 1
99.12%
99.99%
100.00%
50505.05 requests per second
检测结果说明(部分):
====== SET ======
对集合写入测试
100000 requests completed in 1.80 seconds
100000个请求在1.80秒内完成
100 parallel clients
每次请求有50个并发客户端
3 bytes payload
每次写入3个字节的数据
keep alive: 1
保持一个连接,一台服务器来处理这些请求
93.06%
99.96%
99.98%
99.99%
100.00%
所有请求在3毫秒内完成
55648.30 requests per second
每秒处理55648.30次请求
二、Redis-pipline 使用介绍
Redis使用的是客户端-服务器(CS)模型和请求/响应协议的TCP服务器。这意味着通常情况下一个请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端。
Redis客户端与Redis服务器之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务器处理,redis处理完请求命令后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕才能执行
设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次。如果能一次性将100个请求提交给redis server,执行完成之后批量的获取相应,只需要向redis请求1次,然后批量执行完命令,一次性结果,性能是不是会好很多呢?答案是肯定的
【网络延迟】
client与server机器之间网络延迟如下,大约是小于0.1ms(取决于服务器性能)。
ping127.0.0.1-c 4
由于存在网络延迟,假如client和server之间的包传输时间需要0.2秒(实际比这快,取决服务性能)。那么上面的三个命令4个报文至少需要0.8秒才能完成。这样大大消耗了Redis的处理数据的能力,cpu都消耗在这上面了。
而管道(pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回,降低连接消耗,pipeline通过减少客户端与redis的通信次数来实现降低往返延时时间,而且Pipeline 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。 Pipeline 的默认的同步的个数为53个,也就是说arges中累加到53条数据时会把数据提交。如图:client可以将三个命令放到一个tcp报文一起发送,server则可以将三条命令的处理结果放到一个tcp报文返回。
pipeline只需要向redis请求1次,然后批量执行完命令,一次性结果适用于批量操作:获取获取,批量设置。如批量发短信业务场景(降低网络延迟,提高性能)
领取专属 10元无门槛券
私享最新 技术干货