在互联网行业大多数的应该系统都是分布式系统。并且为了优化系统,在架构设计的时候大多数都引入了缓存中间件 – Redis。相对于 memcache 缓存中间件只支持字符串类型, Redi 拥有更多的数据类型。

  • string:字符串是一种基本的数据类型,用于保存 key/value 类型的数据

  • hash:哈希是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象

  • list:列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

  • set:集合是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

  • sorted sets:有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

一般情况下 Redis 可用于使用于以下应用场景

  • 缓存

  • count – 计数

  • 展示最近、最热、点击率最高、活跃度最高等等条件的 Top List

  • 用户最近访问记录也是 Redis List 很好的应用场景

  • 通过 List 和 lpop 及 lpush 接口进行队列的写入与消费

  • Redis 的 Lua 的功能扩展实际给 Redis 带来了更多的应用场景,可以编写若干 command 组合作为一个小型的非阻塞事务或者更新逻辑

  • Redis 提供的主从数据同步功能,其实是对 cache 的一个强有力功能的扩展

Redis 在系统中有这么多的应用场景那么在上线之前我们应该对 Redis 进行性能测试,这样才能让 Redis 在不同的服务器上能够更好的为我们的服务服务。

确保服务稳定 Redis 上线之前应该做的事-LMLPHP
在我们 Redis 安装成功之后,在 ${redis_home}/src 目录中一般会包含以下命令:

  • redis-server:redis 服务器启动命令

  • redis-cli:redis 连接连接服务器的客户端命令

  • redis-benchmark:redis 性能检测命令

其它的我们暂时不讨论,今天主要的讨论的就是 redis-benchmark 这个 redis 性能检测命令。我们输出redis-benchmark --help,就可以查看它的帮助命令。并且它还会给我们一些举例:
确保服务稳定 Redis 上线之前应该做的事-LMLPHP
里面的单词比较简单我就不做过多介绍了,下面就以我的 mac 为例为大家举例几个比较常用的检测,以下就是我的电脑配置:

确保服务稳定 Redis 上线之前应该做的事-LMLPHP
下面就为大家举例如何使用 Redis 做性能压力测试:

1 所有数据的压力测试

可以使用以下命令对 Redis 所有的数据类型做压力测试:

redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000

这个命令的意思:检测服务器 127.0.0.1:6379 ,100 个并发连接,100000 个请求,检测服务器性能。

确保服务稳定 Redis 上线之前应该做的事-LMLPHP
控制台会打印以上信息主要包括以下几个点:

  • 需要压力测试的命令

  • 100000 个命令执行时间所占的百分比

  • 每秒钟可以处理多少个请求

2、固定数据大小的测试

测试存储大小为 100 kb 的数据包的性能

redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100

以下是测试结果:
确保服务稳定 Redis 上线之前应该做的事-LMLPHP
大多数每秒处理数据在 10 万以上。哈哈,看来我的电脑性能还不错。

3、针对特定命令测试

在大多数系统当中,我们只会使用到比如 get/set 的命令,那么我们在做性能测试的时候就只需要对 get/set 命令进行性能测试就可以了。

redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 100000 -q

以下就是测试结果:
确保服务稳定 Redis 上线之前应该做的事-LMLPHP
在控制台只会打印 get/set 命令每秒钟能够处理多少个请求。

4、利用 Lua 脚本测试

Redis 在做性能压力测试的时候,同样也可以使用 Lua 脚本。

redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -q script "redis.call('set', 'foo', 'bar')"

上面的测试目的只是测试某些数据的存储性能 。

以下就是控制台的打印:

确保服务稳定 Redis 上线之前应该做的事-LMLPHP

当然这里只是罗列了几个场景,大家可以根据自己的业务场景进行 Redis 的性能压力测试。

各大互联网企业Java面试题汇总,如何成功拿到百度的offer

阿里面试官:HashMap中的8和6的关系(1)

Java之Redis队列+Websocket+定时器实现跑马灯实时刷新

深入理解JVM垃圾收集机制,下次面试你准备好了吗

JAVA架构师成功拿到阿里P7offer,全靠这份2020最新面试题

大专程序员面试了25家公司,总结出来的痛苦经验!

程序员的十个升职的好习惯

Spring Cloud Gateway 自定义 ReadBodyPredicateFactory 实现动态路由

Spring Cloud Gateway 15 分钟极速入门




本文分享自微信公众号 - Java高级架构师(java968)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

09-12 21:04