阿里云Redis与Tair压力测评

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 无意中发现阿里云开发社区的训练营活动,其中有一个7天玩转Redis、tair训练营计划,里面可以免费领取三个月的试用礼包,因为是参营任务,不领取都不行的那种,领取之后放着也是放着,不如跑跑数据看看Redis和Tair的性能有什么区别,简单的压力测试下,本次测试并不精确,也不具有太多参考意义,真的就是为了测试而测试。

无意中发现阿里云开发社区的训练营活动,其中有一个7天玩转Redis、tair训练营计划,里面可以免费领取三个月的试用礼包,因为是参营任务,不领取都不行的那种,领取之后放着也是放着,不如跑跑数据看看Redis和Tair的性能有什么区别,简单的压力测试下,本次测试并不精确,也不具有太多参考意义,真的就是为了测试而测试。

活动地址链接见最下面的

什么是Tair

这里有具体介绍Tair的视频,里面详细介绍了阿里云Redis和自建Redis的对比分析

https://edu.aliyun.com/course/3114106/lesson/19637

测试工作

本次没有使用Redis自带的Redis Benchmark工具,想着为了测试而测试,就为了测试而开发吧。

一:准备工作

  1. 领取Redis与Tair三个月免费额度
  2. 编写压力测试代码
  3. 准备测试数据。

二:测试方案设计

  1. 批量插入数据查看总体时延,与不同数据量下时延曲线表,记录总体耗时
  2. 批量数据查询,记录查询QPS,内存情况,网络流量等
  3. 将数据库内存空间打满后,查看相同淘汰策略下内容优化情况

三:进行压力测试

  1. 先进行功能测试,校验系统功能在高负载下是否正常。
  2. 加大并发用户数或请求流量,模拟峰值压力情况。
  3. 观察记录关键指标,分析系统瓶颈。

四:机器指标

为了去除本地机器、网络带来的干扰,这次的代码都会运行在ECS服务器中,但自己的ECS服务器都不是杭州区的,还是要通过外网域名的形式连接Redis、Tair,不过数据传输速率也是可靠的。

Redis

Tair

ECS服务器1

ECS服务器1

规格

2 GB 增强版 (vCPU shared)

2 GB 增强版 (vCPU shared)

4C8G

4C8G

最大连接数

10,000

30,000

最大带宽

96 MB/s

96 MB/s

参考QPS

100,000

300,000

副本数

2副本

2副本

分片数量

1

1

Redis版本

Redis 5.0

版本兼容性:Redis 6.0

存储空间

10G

10G

架构类型

非集群

非集群

maxmemory-policy

volatile-lru (按照LRU算法逐出原有数据,但仅逐出设置了过期时间的数据)

volatile-lru (按照LRU算法逐出原有数据,但仅逐出设置了过期时间的数据)

五:运行代码:

package org.rain;


import redis.clients.jedis.*;


import java.io.BufferedReader;

import java.io.File;

import java.io.InputStreamReader;

import java.nio.charset.StandardCharsets;

import java.nio.file.Files;

import java.util.concurrent.*;

import java.util.concurrent.atomic.AtomicInteger;


public class Main {


   public static void readTxtFile(String filePath, JedisPool pool) {

       try {

           File file = new File(filePath);

           if (file.isFile() && file.exists()) {

               InputStreamReader isr = new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8);

               BufferedReader br = new BufferedReader(isr);

               String lineTxt = null;

               AtomicInteger i = new AtomicInteger();

               ExecutorService executorService = new ThreadPoolExecutor(50, 50, 100L, TimeUnit.MILLISECONDS, new SynchronousQueue(), new ThreadPoolExecutor.CallerRunsPolicy());


               while ((lineTxt = br.readLine()) != null) {

                   String[] textArr = lineTxt.split("\t");

                   if (textArr.length <= 6) {

                       continue;

                   }

                   executorService.submit(() -> {

                       try (Jedis jedis = pool.getResource()) {

                           jedis.setex(textArr[0] + "-" + i.getAndIncrement(), 14400, textArr[6]);

                           //                            System.out.println("已处理第" + i);

                       }

                   });

                   executorService.submit(() -> {

                       try (Jedis jedis = pool.getResource()) {

                           jedis.setex(textArr[1] + "-" + i.getAndIncrement(), 14400, textArr[6]);

                           //                            System.out.println("已处理第" + i);

                       }

                   });

               }

               System.out.println("处理完毕,共处理:" + i);

               executorService.shutdown();

               br.close();

           } else {

               System.out.println("文件不存在!");

           }

       } catch (Exception e) {

           System.out.println("文件读取错误!" + e);

       }

   }


   public static void main(String[] args) {

       JedisPoolConfig config = new JedisPoolConfig();

       config.setMaxIdle(200);

       config.setMaxTotal(300);

       config.setTestOnBorrow(false);

       config.setTestOnReturn(false);

       String redisHost = "r-.redis.rds.aliyuncs.com";

       String redisUser = "r-";

       String redisPassword = "";

       String tairHost = "r-.redis.rds.aliyuncs.com";

       String tairUser = "r-";

       String tairPassword = "";

       JedisPool pool;

       if ("redis".equals(args[0])) {

           System.out.println("redis");

           pool = new JedisPool(config, redisHost, 6379, redisUser, redisPassword);

       } else {

           System.out.println("tair");

           pool = new JedisPool(config, tairHost, 6379, tairUser, tairPassword);

       }

       String filePath = "local".equals(args[1]) ? "/Users/Downloads/weibo_train_data.txt" : "/home/weibo_train_data.txt";

           System.out.println(filePath);

           readTxtFile(filePath, pool);

           }

           }

六:模拟数据

1229619条微博用户发帖数据

写入性能截图

Redis

Tair

服务器负载

从图里看,在没有调整任何参数的情况下,插入250w条数据,Redis和Tair基本没有太大的区别,只是Tair的平均时延有些高,两者的QPS都能达到1000,还没有跑满官方的参考值。

读取测试截图

代码

public static void getTxtFile(String filePath, JedisPool pool) {

   try {

       File file = new File(filePath);

       if (file.isFile() && file.exists()) {

           InputStreamReader isr = new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8);

           BufferedReader br = new BufferedReader(isr);

           String lineTxt = null;

           AtomicInteger i = new AtomicInteger();

           ExecutorService executorService = new ThreadPoolExecutor(50, 50, 100L, TimeUnit.MILLISECONDS, new SynchronousQueue(), new ThreadPoolExecutor.CallerRunsPolicy());


           while ((lineTxt = br.readLine()) != null) {

               String[] textArr = lineTxt.split("\t");

               if (textArr.length <= 6) {

                   continue;

               }

               executorService.submit(() -> {

                   try (Jedis jedis = pool.getResource()) {

                       System.out.println(jedis.get(textArr[0] + "-" + i.getAndIncrement()));

                   }

               });

               executorService.submit(() -> {

                   try (Jedis jedis = pool.getResource()) {

                       System.out.println(jedis.get(textArr[1] + "-" + i.getAndIncrement()));

                   }

               });

           }

           System.out.println("处理完毕,共处理:" + i);

           executorService.shutdown();

           br.close();

       } else {

           System.out.println("文件不存在!");

       }

   } catch (Exception e) {

       System.out.println("文件读取错误!" + e);

   }

}

Redis

Tair

总结

通过监控报表的分析,主要的差距还是在平均时延上,在并发50情况下,QPS达到1000左右时,redis的平均时延要比Tair低很多,写入和读取时延都有所差距。其他的两者完全相似。

https://developer.aliyun.com/trainingcamp/5fd706c381604c09bebaf774a6290c5a?spm=a2c6h.12883283.0.0.5f1f4307Aqn8to#free

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5天前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
OS Copilot是阿里云Linux的智能助手,助于提升运维效率,通过学习用户习惯提供智能建议。开发者反馈其在DevOps场景中非常有用,给予10分帮助度评价。用户赞赏其命令执行功能,希望能扩展多命令执行和错误自动修正。与ACK、ECS等集成,可自动化部署和CI/CD流程。文档清晰,适合新手,用户愿意推荐并参与开源开发。
68 3
阿里云操作系统智能助手OS Copilot实验测评报告
|
6天前
|
弹性计算 自然语言处理 运维
阿里云OSCopilot新手测评体验
**OS Copilot是阿里云为Linux打造的智能助手,具备自然语言处理、命令执行和运维功能。用户在Alibaba Cloud Linux 3服务器上安装后,可通过命令行交互,如`co 你好`,进行问答、代码生成(codegen)和摘要(codesum)等。交互模式含聊天、代码生成和代码摘要。产品对新手友好,尤其是在命令执行和问题解答上表现突出,但目前仅限x86_64架构的Alibaba Cloud Linux 3。用户期待其支持更多操作系统和连续执行命令功能,并能与其他云服务如ECS、ACK联动增强云上开发体验。**
30 2
阿里云OSCopilot新手测评体验
|
5天前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
阿里云OS Copilot是一款专为Linux设计的智能运维助手,利用大语言模型提供自然语言问答、命令执行辅助和系统调优功能。软件维护工程师反馈,OS Copilot易于上手,文档清晰,对提升运维效率有显著帮助,评分10/10。其轻量级设计、准确的回答是主要优点,但可能在复杂场景下表现不足。用户期望扩展到更多Linux发行版,增加系统优化建议、代码优化和日志分析功能,并能与其他产品如ACK、ECS联动。希望能有异常处理提示和日志输出以增强问题定位。
76 14
|
5天前
|
弹性计算 人工智能 运维
阿里云操作系统智能助手OS Copilot实验测评报告
**摘要:** 在阿里云与CSDN联合的OS Copilot测试中,一名学生体验者发现该智能助手是强大的编程学习工具,给予10分的帮助评价。尽管有新手上手难度和兼容性问题,他仍强烈推荐并有意参与开源开发。OS Copilot的亮点包括直接的交互式知识问答、编程辅助及命令执行。相比其他产品,其优点是简洁和准确性,但需改进新手教程。用户期待更多功能,如系统优化建议,扩大操作系统支持,并建议与阿里云产品如ACK、ECS集成,以提升运维效率。
88 12
|
5天前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
OS Copilot是Alibaba Cloud Linux基于大模型构建的操作系统智能助手,其旨在通过自然语言问答、辅助命令执行及系统运维调优等功能,提升用户对Alibaba Cloud Linux的使用效率。
|
1天前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
OS Copilot是针对Linux的智能助手,助力学习、运维及编程。用户界面直观,自然语言交互方便新手。官方文档详尽,但初次配置略复杂,适合学生和开发者。在提高代码编写和调试效率、系统学习上得分高,功能亮点包括代码生成、问答和命令执行。用户期待更多操作系统支持、自动错误分析和系统排查功能。
98 3
|
5天前
|
弹性计算 运维
阿里云操作系统智能助手OS Copilot实验测评报告
简介:体验OS Copilot对于新人使用是友好的,教程给出的比较全面,还支持语言问答,命令执行等优点,还允许用户直接在操作系统内部使用阿里云,完成ECS的实例查询等操作。但是在系统兼容上表现出不足,对于服务器地区不明确。但总体来说测评者对OS Copilot其智能化、高效化、专业化评价是高的。
18 4
|
3天前
|
数据采集 自然语言处理 监控
阿里云百炼知识检索应用测评
阿里云百炼知识检索应用测评
|
4天前
|
运维 人工智能 数据可视化
|
5天前
|
弹性计算 人工智能 运维
阿里云操作系统智能助手OS Copilot实验测评报告
阿里云操作系统智能助手OS Copilot实验测评报告
63 2