记redis的一个测试
现有020的系统架构走库存,取券通过Fetch前n条来实现买n张优惠券,但此做法在高并发时有严重的性能问题,性能问题主要体现在数据库。
为了优化此性能,系统改为redis,走队列模式,即生产者消费者。
以下是自己做性能测试一此小杂记。
- public static void testEnqueue()
- {
- Console.WriteLine("开始运行");
- var stopWatch = new Stopwatch();
- stopWatch.Start();
- for (int i = ; i < ; i++)
- {
- redisClient.EnqueueItemOnList("o2olist", i.ToString().PadLeft(, ''));
- }
- var time = stopWatch.ElapsedMilliseconds;
- stopWatch.Stop();
- //125935,每秒可写800笔
- Console.WriteLine(string.Format("耗时:{0}毫秒", time));
- Console.ReadKey();
- }
- public static void testDequeue()
- {
- Console.WriteLine("开始运行");
- var stopWatch = new Stopwatch();
- stopWatch.Start();
- var a = redisClient.GetListCount("o2olist");
- //队列操作之出队
- for (int i = ; i < a; i++)
- {
- Console.WriteLine(redisClient.DequeueItemFromList("o2olist"));
- }
- var time = stopWatch.ElapsedMilliseconds;
- stopWatch.Stop();
- //141538每秒可取714
- Console.WriteLine(string.Format("耗时:{0}毫秒", time));
- Console.ReadKey();
- }
- public static void testDequeue2()
- {
- Console.WriteLine("开始运行:" + DateTime.Now.ToString("HH-mm-ss:fff"));
- Console.ReadKey();
- var stopWatch = new Stopwatch();
- stopWatch.Start();
- //四台机器买券并发估计10笔/s
- for (int i = ; i < * ; i++)
- {
- new Thread(() =>
- {
- try
- {
- RedisClient redisClient1 = new RedisClient(host, port);
- while (true)
- {
- var a = redisClient1.DequeueItemFromList("o2olist");
- if (a == null)
- {
- Console.WriteLine(DateTime.Now.ToString("HH-mm-ss:fff"));
- break;
- }
- else
- Console.WriteLine(a);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- //
- //File.AppendAllText("c:\\e.log", DateTime.Now.ToString("HH-mm-ss:fff") + "\r\n" + ex.Message + ex.InnerException);
- }
- }
- ).Start();
- }
- //耗时38s,2631笔每秒
- Console.ReadKey();
- }
ps:目前生产是4台机器,按每秒10笔并发计算
结论:
1、入队性能800笔/s
2、单线程出队性能714笔/s
3、40并发2631笔每秒
ps:
环境说明:reids部署在32位suse上,程序是我本地用.net写的
后续:
1、入队要做一个守护进程去定时处理,考虑在linux放个java程序由contab调度。
2、出队没有券时的业务场景考虑
记redis的一个测试的更多相关文章
- 为redis分配一个新的端口
为redis分配一个8888端口,操作步骤如下:1.$REDIS_HOME/redis.conf重新复制一份,重命名为redis8888.conf.2.打开redis8888.conf配置文件,找到p ...
- 使用redis设计一个简单的分布式锁
最近看了有关redis的一些东西,了解了redis的一下命令,就记录一下: redis中的setnx命令: 关于redis的操作命令,我们一般会使用set,get等一系列操作,数据结构也有很多,这里我 ...
- 基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册
项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...
- [日常] Redis基本使用测试
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(list ...
- 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的 ...
- 手把手教你用redis实现一个简单的mq消息队列(java)
众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有 ActiveMQ,RabbitMQ,Zero ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- soapui中文操作手册(二)----通过您的WSDL请求创建一个测试
1.通过您的WSDL请求创建一个测试 点击加号旁边的导航拓展项目树的Web服务,并选择请求: 在SoapUI Pro中,所述请求编辑出现在右边.SoapUI Pro有一个编辑器,它简化了XML的层 ...
- PHP + Redis 实现一个简单的twitter
原文位于Redis官网http://redis.io/topics/twitter-clone Redis是NoSQL数据库中一个知名数据库,在新浪微博中亦有部署,适合固定数据量的热数据的访问. 作为 ...
随机推荐
- C++ 中复杂的声明
1.方法也是有类型的,方法的类型由返回类型和形参表决定.比如int F (int)的类型就是去掉方法名,int (int). 2.对于方法类型,在返回类型和形参表之间,加上一个名称F,就表示一个特定的 ...
- CDOJ 481 Apparent Magnitude 水题
Apparent Magnitude Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/sh ...
- leetcode || 53、Maximum Subarray
problem: Find the contiguous subarray within an array (containing at least one number) which has the ...
- NDK环境配置
1.下载安装插件:com.android.ide.eclipse.ndk_23.0.2.1259578.jar copy到E:\eclipse\adt-bundle-windows-x86- ...
- ASP.NET 去除所有HTML标记的方法
using System.Text.RegularExpressions /// <summary> /// 去除HTML标记 /// </summary> /// <p ...
- 基于 Jenkins 快速搭建持续集成环境--转
源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...
- MDI/MDIX接口
转载:http://blog.chinaunix.net/uid-24148050-id-137067.html MDI/MDIX is a type of Ethernet port connect ...
- 在 CentOS 中编译安装 VIM 7.3
转载:http://blog.csdn.net/zhanglyung/article/details/6204574 默认安装的 Vim 不带有多字符支持,所以不支持中文.无论是将 CentOS 本来 ...
- 炼数成金hadoop视频干货06-10
视频地址:http://pan.baidu.com/s/1dDEgKwD 第六课统讲了hadoop几个子项目和HBase,第七课还是讲的HBase 第八课讲了PIG 第九课讲了Hive和Zookeep ...
- ASP.NET弹出模态对话框【转】
主页面 PageBase.aspx.cs 中的代码 protected void Page_Load(object sender, EventArgs e) { if (!this.IsPost ...