Redis+Restful 构造序列号和压力测试【原创】
【本人原创】,欢迎交流和分享技术,转载请附上如下内容:
如果你觉得这篇文章对你有帮助,请记得帮我点赞, 谢谢!作者:kevin【转自】http://www.cnblogs.com/itshare/
很多时候,我们常常会需要给系统构造不同的流水号,并且不希望它出现重复数据,有很多方法能够实现这个需求。
但是,我们希望方法是能够动态支持不同业务场景、跨语言和操作平台,支持服务水平扩展。
一、需求描述:
1. 每天的不同业务的流水号 (每天从1开始)
2. 永久的不同业务的唯一标识 (历史从1开始)
3. 不依赖数据库的Sequence和支持跨平台。
二、技术实现
1. 采用redis的内部函数incr(string main_key, string item_key, long addValue)方法,对不同场景的ID进行自动+1或+n进行构造和返回。
2. 采用java的restful进行数据请求和返回结果。
三、代码分析
1. 后台代码
因为Redis本省是线程安全,所以我们不用自己加些写入数据的锁,只需要直接调用incre方法,存入增量1或n,redis就能自动返回我们需要的下一个sequence的数值。
这个类似数据库oracle的sequence.nextval


2.前台代码
主要是restful接受参数:main_key和item_key,你也可以增加一个自定义参数addValue,
这样也就可以做批量构造流水号或sequence (见 数值区间 =【maxCurReturn - addValue + 1, maxCurReturn】).

四、压力测试
因为这里只是一台Redis测试机器,所以多线程去请求获得的单步构造流水号的TPS是675。
但是这个已经足够我们使用它做流水号的构造了。如果超过这个范围,就要考虑部署服务和Redis集群,并且代码采用批量获取(addValue不要传入1,要传入批量的构造个数n)。
测试1:手动执行一次soapUI的单个请求,后台查看Id变为1

测试2:执行三次压力测试(每次1000个线程并发请求),平均tps为678,后台查看ID变为69765


Redis+Restful 构造序列号和压力测试【原创】的更多相关文章
- Redis+Restful 构造序列号和压力测试【后续】
大家还记上篇博文https://www.cnblogs.com/itshare/p/8643508.html,测试redis构造流水号的tps是600多/1s. 这个速度显然不能体现redis 集群在 ...
- redis的线程模型 与 压力测试
当客户端与ServerSocket产生连接时,会产生一个 AE_REABLE / AE_WRITABL 事件, 多个Socket可能并发产生不同的事件,IO多路复用程序会监听这些Socket,按照顺序 ...
- laravel+Redis简单实现队列通过压力测试的高并发处理
秒杀活动 在一般的网络商城中我们会经常接触到一些高并发的业务状况,例如我们常见的秒杀抢购等活动, 在这些业务中我们经常需要处理一些关于请求信息过滤以及商品库存的问题. 在请求中比较常见的状况是同一用户 ...
- 如何使用 JMeter 调用你的 Restful Web Service?进行简单的压力测试和自动化测试
表述性状态传输(REST)作为对基于 SOAP 和 Web 服务描述语言(WSDL)的 Web 服务的简单替代,在 Web 开发上得到了广泛的接受.能够充分证明这点的是主流 Web 2.0 服务提供商 ...
- OpenResty 高阶实战之————Redis授权登录使用短连接(5000)和长连接(500W) 使用连接池AB压力测试结果
一.短连接开始测试 ab -n 5000 -c 100 -k 127.0.0.1/test_redis_short #demo1 Concurrency Level: Time taken for t ...
- redis压力测试详解
redis做压测可以用自带的redis-benchmark工具,使用简单,效果也比较不错. linux下一般无需下载,windows下redis-benchmark压力测试工具下载地址:http:// ...
- (原创)如何对APP服务端进行压力测试
版权声明:本文为原创文章,转载请先联系并标明出处 APP性能测试分为客户端性能测试和服务端性能测试,客户端的性能测试主要是针对启动快慢.耗电量.耗流量.内存使用等指标进行评估,目前主流的APP客户端性 ...
- Twemproxy和Redis性能压力测试
性能测试 Redis自带了一个叫 redis-benchmark的工具来模拟N个客户端同时发出M个请求,(类似于Apache ab程序),你可以使用redis-benchmark -h来查看基准参数. ...
- 自己开发的网站压力测试(阿里云1M带宽)
背景 项目采用微服务架构设计,独立商城系统,博客系统,搜索系统,sso单点系统部署在docker环境下 商城系统(django) 博客系统(flask) 搜索系统(es+flask+restful) ...
随机推荐
- 获得某个月的天数(java, mysql, oracle)
java方式: Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR,year); cal.set(Calendar.M ...
- 转: JavaScript 获取对象属性和方法
一.获取对象属性和方法 Object.keys()for in 返回对象的可枚举属性和方法的名称数组. Object.getOwnPropertyNames() 返回的数组的所有属性(可枚举或不可枚举 ...
- Docker(一):Docker入门教程
如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...
- 影响JavaScript应用可扩展性因素
引言:JavaScript 应用变得越来越庞大.这是因为使用JavaScript能做的事情远比我们大多数人所需求的要多得多.我们不能仅因为技术上可行,就去考虑软件系统的扩展问题.为一个不需要扩展的系统 ...
- Android的微信智能心跳方案
原文地址: 年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析.我和春哥抓包测试了差不多两个多礼拜 ...
- VBR与CBR的区别是什么?
VBR是动态码率.CBR是静态码率. VBR(Variable Bitrate)动态比特率.也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方 ...
- freemarker字符串拼接
freemarker字符串拼接 1.字符串拼接的几种类型 (1)字符串和字符串 (2)字符串和数字 (3)字符串和字符串变量 (4)字符串变量和字符串变量 2.演示示例 <#--定义字符串--& ...
- freemarker基本数据类型
freemarker基本数据类型 1.基本数据类型 (1)字符串 (2)数字 (3)布尔值 (4)日期 2.展示示例 <html> <head> <meta http-e ...
- 检测dll是32/64位 ?
检测dll是32/64位 ? void CCheck32Or64Dlg::OnButton2() { CString fileName = ""; CFileDialog *fil ...
- hdu5730 Shell Necklace
重温了这道cdq+FFT 讲白了就是不断对 dp[l~mid] 和 sh[1~r] 进行fft 得到 dp[mid+1~r] #include<bits/stdc++.h> using n ...