温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
Redis
并发
系统
研究
实现
孙景玉
信息记录材料 2022年12月 第23卷第12期 45论 著0 引言随着电子商务的普及,人们的购物方式、消费方式和生活方式发生了翻天覆地的改变,手机或是电脑可以随时随地使用互联网,电子商务交易量也因此翻了几倍。而电商平台通过跨地域的低价销售模式,在交易的过程中提供专业服务,不仅有效地降低了成本,还吸引了大量的客户1。各大电商平台所推出的秒杀活动更是以低廉的价格、有限的商品和超短的销售时间吸引消费者的注意,无形中增加顾客的购买欲望,如广为熟知的淘宝、京东、拼多多等大型电商平台,为了提高客户的体验,增强平台的高可用性,吸收新用户、提高收益率,推出低价的“秒杀”业务,短时间内为电商平台带来巨大流量以及消费收益,因此秒杀活动越来越受电商平台的重视。但是,电商平台的秒杀系统需要面对短时间内激增的流量压力、网络作弊(如秒杀机器人)和线程超卖等问题2。对于大型电商企业而言,由于自身资金雄厚,可以选择自主研发文件存储系统、缓存系统以及负载均衡系统,投入大量人力、物力和财力,从软件、硬件各个方面去解决这些问题。对于中小型电商平台来说,在面对限时促销、秒杀等这些高并发场景的时候,如果不对系统做出性能优化处理,那么系统就会轻而易举地陷入异常状态,从而造成收益损失3。由此看来,高效准确地处理高并发请求,优化用户使用体验,并且向客户提供专业、可靠以及准确的服务,是目前各大电商平台亟待解决的问题。1 高并发解决技术方案鉴于此,文章从现实需求出发,通过研究秒杀活动的高并发以及线程超卖等问题,对秒杀进行性能优化,设计出高性能的秒杀系统。文章采用以下关键技术:1.1 Redis 缓存方案为了提高页面的响应速度,以及让系统能够适应高并发的场景,需要设计使用缓存方案。页面优化方面主要使用页面缓存+URL缓存+对象缓存。开发的瓶颈在于数据库,需要想办法减少对数据库的访问,所以需要使用缓存,通过各种不同粒度的缓存细化方案,提高响应速度。此外可以让页面静态化,将 HTML 缓存到客户端。Redis 是一个基于内存操作、运行速度非常快、读写性能极高的非关系型数据库,可以存储键(key)与多种值(value)之间的映射,支持多种数据结构的存储如 list、set、zset、hash 等4。Redis 的强大之处就是它具有极高的读写性能,根据官方资料显示,读取的速度可达 110 000 次/s,写的速度可达81 000 次/s。同时,Redis 的所有操作都是原子性的,要么全部执行成功,要么失败回滚5。单个操作是原子性的,多个操作也支持事务,并且完全开源免费。基于 Redis 的高并发秒杀系统的研究与实现孙景玉,孙 浩,高婷玉,秦雯波,陈虹云(南通理工学院 江苏 南通 226000)【摘要】秒杀活动作为电商平台宣传吸引客户的一种有效手段,一般会以低价、限时、限量销售来吸引大量用户参与,给平台带来巨大的流量以及收益。但同时因为秒杀活动具有瞬时高并发特性,可能会引起数据库直接宕机或者在多线程情况下发生超卖的问题。针对高并发场景的特点,文章从系统框架优化入手,通过设计基于 Redis 的缓存方案以及对秒杀接口的优化、页面静态化和简化数据库设计来优化系统。使用Jmeter进行性能测试,对比发现优化后吞吐量明显提升,系统的抗并发能力明显提高。【关键词】秒杀;Redis;优化【中图分类号】TP279 【文献标识码】A 【文章编号】1009-5624(2022)12-0045-03Research and Implementation of High Concurrency Seckilling System Based on RedisSUN Jingyu,SUN Hao,GAO Tingyu,QIN Wenbo,CHEN HongyunNantong Institute of Technology,Nantong,Jiangsu 226000,China【Abstract】As an effective means for e-commerce platforms to publicize and attract customers,Seckilling usually attracts a large number of users with low prices,limited time and limited sales,which brings huge traffic and income to the platform.But at the same time,because of the instantaneous high concurrency of the Seckilling activity,it may cause the direct downtime of the database or oversold in the case of multithreading.In view of the characteristics of high concurrency scenarios,the article starts with the optimization of the system framework,and optimizes the system by designing a redis based caching scheme,optimizing the Seckilling interface,making the page static and simplifying the database design.JMeter is used for performance test,and the comparison shows that the throughput after optimization is significantly improved,and the anti concurrency ability of the system is significantly improved.【Key words】Seckilling;Redis;OptimizationDOI:10.16009/13-1295/tq.2022.12.029信息记录材料 2022年12月 第23卷第12期 46 论 著1.2 消息队列为了解决不同业务流程之间的通信,引入了第三方消息中间件,实现系统的异步下单、流量削峰,提高系统响应速度和运行效率,进一步提高用户体验感。消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供异步、可靠的消息传输的支撑性软件系统6。本系统使用的是 RabbitMQ 作为第三方消息中间件,整合SpringBoot 框架,具有一定的独立性,RabbitMQ 也是市面上比较流行的一款消息中间件,是基于 AMQP 协议的开源消息中间件,具有很好的稳定性、数据一致性以及可靠性,整合 SpringBoot 框架开发后,可以非常方便地面向消息中间件进行对应的开发。1.3 轻量级开发框架技术采用当前互联网公司常用的前后端分离协作的开发方式,结合主流的 SpringBoot、Mybatis、SpringMVC 轻量级的胶水框架,实现系统前、后端的分别开发。针对Spring缺点进行改善和优化,遵循约定大于配置的思想,让开发者不再需要在业务逻辑和配置之间进行思维的切换,可以专心于业务逻辑的编写,从而大大提高开发的效率7-8。1.4 加密技术用户以及商家信息数据的安全对于电商系统来说是个极其重要的问题。如果系统安全问题不能保证,就会给用户以及商家带来不必要的损失,通过隐藏秒杀接口地址,秒杀接口防刷限流等一系列操作来对系统进行安全优化,防止非法用户闯入以及非法请求破坏系统,造成不可挽回的损失。同时使用 MD5 进行二次加密,第一次加密用户密码,第二次采用密码“加盐”,也就是在加密完密码之后,在密码的不同位置插入不同的值,再进行一次 MD5 加密,确保用户信息安全。2 需求分析电商秒杀系统包括秒杀商城前台系统以及电商后台管理系统。使用角色是参与秒杀活动的用户以及商城后台的管理员。对于秒杀商城前台系统,不但要实用、操作简便,以方便用户使用,还要可以满足高并发场景下的秒杀业务需求,防止数据库宕机或者线程超卖,给商家以及平台带来损失。而电商后台管理系统,是针对商城管理人员所设计的,主要用于对用户信息、商品信息、秒杀商品以及订单信息的管理。通过后台管理系统可以实现商家对店铺的管理,直观地体现出每日订单量、总销售量以及用户量,能够更好地协助管理者对商城的管理。3 系统设计针对秒杀问题的解决方案,文章设计并实现一款电商秒杀系统进行验证。系统分为秒杀前台系统和管理后台系统。秒杀前台系统的主要功能包括登录、浏览商品、查看商品详细信息(包含秒杀功能)、生成订单、支付订单。后台管理系统的功能包括商品管理、秒杀商品管理、秒杀用户管理、秒杀订单管理、管理员管理等。系统功能结构设计图如图 1、图 2 所示。图 1 用户端功能设计图图 2 管理端功能设计图3.1 用户端功能设计(1)注册、登录。通过输入用户名(手机号)、密码,进行登录。若没有账号,则需要到注册界面输入手机号码、密码以及确认密码进行注册,注册成功后再去登录。(2)商品浏览。展示参与秒杀活动的商品信息,包括商品名称、商品图片和商品价格、秒杀价格和商品库存。(3)秒杀商品详情。商品详情页面可以展示商品名称、商品图片、秒杀开始时间、秒杀状态(未开始/进行中/已结束)、商品原价、秒杀价格、库存数量、验证码以及秒杀按钮。秒杀流程图如图 3 所示。图 3 秒杀流程图信息记录材料 2022年12月 第23卷第12期 47论 著(4)订单详情。主要展示订单的信息,包括商品名称、商品图片、订单原价、下单时间、订单状态、收货人、收货地址。3.2 管理员端功能设计(1)管理员登录/退出。(2)商品管理。管理员可以对商城的商品进行操作,可以增加商品、修改商品信息、删除商品、查询商品。(3)用户管理。管理员可以查看用户列表,可以查看到用户的手机号、用户名、最近一次的登录时间、登录次数以及用户状态。管理员也可以修改用户的信息、可以根据用户的手机号搜索用户。(4)秒杀管理。管理员可以添加参与秒杀活动的商品,或者删除已经秒杀结束的商品。可以对秒杀商品的信息进行修改,对秒杀商品进行查询。(5)订单管理。管理员可以对订单信息、秒杀订单信息进行修改,也可以根据手机号查询用户的订单。(6)销售统计。管理员登录后在控制台可以查看销售总额、订单总数、用户数量。4 性能测试当软件开发到一定程度时,要对其自身性能进行测试,从而有效发现软件中存有的缺陷,使软件产品自身品质得到有效提升,并对其功能进行不断完善9。性能测试主要基于静态与动态资源的程序,如静态资源文件、Servlet JAVA 对象、数据库、FTP 服务器等10。文章使用 Jmeter工具对电商秒杀系统的秒杀接口进行压力测试,分别记录没做优化之前与做了优化之后秒杀接口的 QPS(吞吐量)。步骤如下:(1)生成脚本。编写 JAVA 代码使用 JDBC 的方式连接数据库,生成对应数据,添加线程组基于对性能测试用例的分析数据。(2)创建线程组,设置线程数。新建一个线程组,设置线程数为 1 000,循环次数 10 次。(3)添加 HTTP 请求,添加聚合报告。依次选择添加、取样器、HTTP 请求,并且添加一个聚合报告来查看系统QPS(吞吐量)。(4)新建 CSV Data,导入脚本。选择新建 CSV Data选项,将录制好的脚本 token.txt 导入,点击开始,完成之后可以查看聚合报告。秒杀详情界面如图 4 所示,性能测试得出的聚合报告如图 5、图 6 所示。图 4 秒杀商品详情界面图 5 未优化前的结果图 6 优化后的结果对比两次压测结果可以看出优化后吞吐量明显提升,系统的抗并发能力明显提高。5 结语文章研究了秒杀活动的高并发场景特点,提出了基于 Redis 的缓存方案,对