美文网首页Redis应用
Redis的基础概念以及性能测试

Redis的基础概念以及性能测试

作者: 李小磊_0867 | 来源:发表于2019-12-25 18:22 被阅读0次

Redis基础概念

Redis是一个开源的NoSql数据库,key-value类型。近些年在互联网界应用较为广泛,其主要特点有

  • Redis支持数据持久化,可以将内存中的数据保存到磁盘,当服务宕机重启后,可以将磁盘中保存的数据再次加载并提供服务
  • 除了常规的key-value(字符串)类型的数据,Redis还支持list(列表)、set(集合)、zset(有序集合)、hash(散列)等数据结构,并在这些数据结构上提供了一系列方法和元算方法
  • Redis支持数据备份,master-salve模式

总体上来说,Redis的主要优点有

  • 存取性能高,测试的性能测试读性能160000+次/秒写性能80000+次/秒
  • 支持的数据结构丰富,五种基础数据类型String、list、set、zset、hash等,可以满足业务的各种复杂数据存取
  • 原子操作,Redis的所有指令都是原子操作(单一操作指令),当出现多个指令时,可能出现不一致现象
  • 事务支持,MULTIEXEC配合可以实现事务支持,针对多个指令操作时,为了保证数据一致性,可以采用事务
  • 丰富的特性,订阅发布机制、通知、Expire等等

性能测试

Redis的一个重要特点是存取性能高,且较为稳定。安装完成后,将借助提供的性能测试工具redis-benchmark进行性能测试,做到心里有数,在实际项目中可以做出粗略的评估,是采用哨兵的单节点,还是分不式部署以便完成更高并发读取官方文档

# redis-benchmark工具的指令格式,这里只描述了几个常用的参数,更多的查看官方文档
redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

# -h hostname用于描述要测试连接的主机IP,如果测试本机,可以忽略
# -p 端口,默认为6379,当忽略该参数时,表示连接默认端口为6379
# -c 并发连接的客户端数量,即并发数,默认为50,在实际测试中可以动态调整该参数
# -n 一次并发测试过程中,发起的总请求数,默认为10000
# -k 1:keep alive,0-reconnect,默认为1
# -t 只测试test中描述的指令,缺省该参数时,默认全部命令测试一遍,如 -t set,lpush只测试set、lpush指令
# -q 只测试,静默,不显示输出,只展示测试结果

以下测试的本机硬件基础信息:CPU(8核 Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz)、内存16G。

整体测试

# 100并发,发起100000次请求
redis-benchmark -p 6300 -c 100 -n 100000

====== PING_INLINE ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
147929.00 requests per second

====== PING_BULK ======
  100000 requests completed in 0.69 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
145985.41 requests per second

====== SET ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
147275.41 requests per second

====== GET ======
  100000 requests completed in 0.69 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
145137.88 requests per second

====== INCR ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
146412.88 requests per second

====== LPUSH ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
146198.83 requests per second

====== RPUSH ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
146842.88 requests per second

====== LPOP ======
  100000 requests completed in 0.69 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
145560.41 requests per second

====== RPOP ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
147058.83 requests per second

====== SADD ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
146412.88 requests per second

====== HSET ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
147058.83 requests per second

====== SPOP ======
  100000 requests completed in 0.69 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
145985.41 requests per second

====== LPUSH (needed to benchmark LRANGE) ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.95% <= 1 milliseconds
100.00% <= 1 milliseconds
146627.56 requests per second

====== LRANGE_100 (first 100 elements) ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.95% <= 1 milliseconds
100.00% <= 1 milliseconds
147058.83 requests per second

====== LRANGE_300 (first 300 elements) ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
148148.14 requests per second

====== LRANGE_500 (first 450 elements) ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
146842.88 requests per second

====== LRANGE_600 (first 600 elements) ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

99.90% <= 1 milliseconds
99.99% <= 2 milliseconds
100.00% <= 2 milliseconds
148148.14 requests per second

====== MSET (10 keys) ======
  100000 requests completed in 0.68 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
147929.00 requests per second

综上,100并发10W次请求,所有指令的处理请求数基本上在14W+的水平。

redis-benchmark -p 6300 -c 1000 -n 100000 -q

PING_INLINE: 122850.12 requests per second
PING_BULK: 126742.72 requests per second
SET: 125156.45 requests per second
GET: 123304.56 requests per second
INCR: 124069.48 requests per second
LPUSH: 121951.22 requests per second
RPUSH: 126582.27 requests per second
LPOP: 125628.14 requests per second
RPOP: 126422.25 requests per second
SADD: 124688.28 requests per second
HSET: 124223.60 requests per second
SPOP: 124223.60 requests per second
LPUSH (needed to benchmark LRANGE): 125313.29 requests per second
LRANGE_100 (first 100 elements): 126103.41 requests per second
LRANGE_300 (first 300 elements): 125156.45 requests per second
LRANGE_500 (first 450 elements): 125313.29 requests per second
LRANGE_600 (first 600 elements): 124069.48 requests per second
MSET (10 keys): 125786.16 requests per second

当并发增长到1000时,其整体处理性能有所下降,在12w+/秒的处理请求水平。

测试部分指令

# 1000并发,100万的请求,只测试set、get指令
redis-benchmark -p 6300 -c 1000 -n 1000000 -t set,get -q

SET: 122654.24 requests per second
GET: 124331.71 requests per second

# 整体性能也在12W+/秒的读写速度

相关文章

  • Redis的基础概念以及性能测试

    Redis基础概念 Redis是一个开源的NoSql数据库,key-value类型。近些年在互联网界应用较为广泛,...

  • Redis的性能测试与基本知识

    性能测试 启动redis服务器(基于自己的配置文件启动) 使用redis自带的性能测试工具测试并发性 基础知识 R...

  • Redis 性能测试

    Redis 性能测试 Redis 性能测试是通过同时执行多个命令实现的。 语法 1、redis 性能测试的基本命令...

  • 性能测试进阶(二)

    现在开始正式的来理解性能测试 一、性能测试基础 什么是性能,以及忽视性能回带来怎样的结果,那么什么是性能测试...

  • 性能测试基础篇

    一、性能测试的概念和目的 1、性能测试概念: 在正常、峰值以及异常负载条件下,测试系统的各项性能指标通过自动化的测...

  • 一,性能方案设计

    一,需求分析与测试设计 根据具体的性能测试需求,确定测试类型以及压测模块(web/mysql/redis/系统整体...

  • 性能测试基础概念

    一、性能测试工具 二、性能测试基础 三、服务器性能诊断知识 知识点:1.进程、线程任务之间的区别2.线程的中断优先...

  • 性能测试的基础概念

    性能测试的目的:发现性能瓶颈 1.性能测试概念: 性能测试是一个非常广泛的概念,包括很多发面的测试,也被称为非功能...

  • 姗姗聊测试-性能测试

    性能测试概念 什么是性能测试:通过自动化测试工具模拟多种正常、峰值以及异常负载条件下系统的各项性能指标的测试。基准...

  • 性能测试分层模型

    大家好,我是阿萨。一说到性能测试,相信大家对各种概念已经是滚瓜烂熟了。性能测试,压力测试,负载测试。以及常见的性能...

网友评论

    本文标题:Redis的基础概念以及性能测试

    本文链接:https://www.haomeiwen.com/subject/yqxhoctx.html