首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis-benchmark、Pipeline使用介绍

简介:

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次,然后批量执行完命令,一次性结果适用于批量操作:获取获取,批量设置。如批量发短信业务场景(降低网络延迟,提高性能)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190129G0PVV000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券