华为云应用中间件DCS系列—Redis实现(电商网站)秒杀抢购示例
云服务、API、SDK,调试,查看,我都行
阅读短文您可以学习到:应用中间件系列之Redis实现(电商网站)秒杀抢购示例
1 什么是DEVKIT
华为云开发者插件(Huawei Cloud Toolkit),作为华为云围绕其产品能力向开发者桌面上的延伸,帮助开发者快速在本地连接华为云,打通华为云到开发者的最后一公里。Huawei Cloud ToolKit是围绕华为云开发者生态工具体系打造的一系列IDE插件,支持VS Code、IntelliJ IDEA等系列平台、以及华为云自研 CodeArts IDE ,帮助开发者更高效、便捷的搭建应用。致力于为开发者提供更稳定、快速、安全的编程体验。
体验路径:Toolkit-华为云

2 IDE与DEVKIT的关系
2.1 什么是CodeArts IDE?
CodeArts IDE是一个集成开发环境(IDE),兼具源代码编辑器的简易性和开发人员工具的强大功能,如代码补全和调试。
下载路径:Toolkit-华为云
2.2 IntelliJ IDEA与DEVKIT的关系
安装准备
下载并安装JDK1.8或更高版本。
下载并安装IntelliJ IDEA 2020.2或更高版本。
安装验证
在IntelliJ系列平台上安装插件成功后在左侧的导航栏中可以看到Huawei Cloud Toolkit图标,点击后面板会出现Huawei Cloud API的字样,则说明安装成功。
下载路径:Toolkit-华为云
2.3 CodeArts IDE与DEVKIT的关系
API插件是CodeArts IDE原生内置的插件,默认已经安装。左侧的导航栏中可以看到相关图标。

下载路径:Toolkit-华为云
2.4 Visual Studio Code IDE与DEVKIT的关系
安装准备
下载并安装Visual Studio Code最新版本。
安装验证
在VS Code IDE安装插件成功后在左侧的导航栏中可以看到Huawei Cloud Toolkit图标,点击后面板会出现Huawei Cloud API的字样,则说明安装成功。
下载路径:Toolkit-华为云
3 Redis实现(电商网站)秒杀抢购示例
3.1 Redis实现(电商网站)秒杀抢购示例
版本说明
本示例基于华为云分布式缓存服务Redis基础版 5.0开发。
简介
Redis实现(电商网站)秒杀抢购示例(Java版本)
电商网站的商品类目、推荐系统以及秒杀抢购活动,适宜使用Redis缓存数据库。
例如秒杀抢购活动,并发高,对于传统关系型数据库来说访问压力大,需要较高的硬件配置(如磁盘IO)支撑。Redis数据库,单节点QPS支撑能达到10万,轻松应对秒杀并发。实现秒杀和数据加锁的命令简单,使用SET、GET、DEL、RPUSH等命令即可。对分布式应用加锁,能够避免出现库存超卖及无序访问等现象。本实践介绍如何使用Redis对分布式应用加锁。
开发前准备
注册华为云账号,详细操作请参见如何注册华为云管理控制台的用户?,并完成实名认证。
已购买具有公网IP的ECS,详细操作请参见购买并登录Linux弹性云服务器。
已购买DCS缓存实例,详细操作请参见购买缓存实例,且需保证DCS实例与已购买具的ECS在同一虚拟私有云、子网内,并在已购买具的ECS上配置公网访问Redis,详细操作请参见使用Nginx实现公网访问Redis 4.0/5.0的单机/主备/Proxy集群实例。
安装SDK
您可以通过Maven方式获取和安装SDK,首先需要在您的操作系统中下载并安装Maven ,安装完成后您只需要在Java项目的pom.xml文件中加入相应的依赖项即可。
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version>
</dependency>
 
开始使用
导入依赖模块
// 通用唯一识别码类
import java.util.UUID;
// Redis客户端Jedis类
import redis.clients.jedis.Jedis; 
加锁
示例代码
 /** @param lockName      锁名* @param timeout       获取锁的超时时间* @param lockTimeout   锁的有效时间* @return              锁的标识*/public String getLockWithTimeout(String lockName, long timeout, long lockTimeout) {String ret = null;Jedis jedisClient = new Jedis(HOST, PORT);try {String authMsg = jedisClient.auth("YOUR PASSWORD");if (!SUCCESS.equals(authMsg)) {System.out.println("AUTH FAILED: " + authMsg);}String identifier = UUID.randomUUID().toString();String lockKey = "DLock:" + lockName;long end = System.currentTimeMillis() + timeout;while (System.currentTimeMillis() < end) {String result = jedisClient.set(lockKey, identifier, SET_IF_NOT_EXIST, EXPIRE_TIME, lockTimeout);if (SUCCESS.equals(result)) {ret = identifier;break;}try {Thread.sleep(2);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}} catch (Exception e) {} finally {jedisClient.quit();jedisClient.close();}return ret;} 
释放锁
示例代码
 /** @param lockName        锁名* @param identifier    锁的标识*/public void releaseLock(String lockName, String identifier) {Jedis jedisClient = new Jedis(HOST, PORT);try {String authMsg = jedisClient.auth("YOUR PASSWORD");if (!SUCCESS.equals(authMsg)) {System.out.println("AUTH FAILED: " + authMsg);}String lockKey = "DLock:" + lockName;if (identifier.equals(jedisClient.get(lockKey))) {jedisClient.del(lockKey);}} catch (Exception e) {} finally {jedisClient.quit();jedisClient.close();}}
 
模拟手机秒杀抢购
示例代码
public void handleOder() {String userName = UUID.randomUUID().toString().substring(0, 8) + Thread.currentThread().getName();String identifier = DLock.getLockWithTimeout("Huawei Mate 10", 10000, 2000);System.out.println("正在为用户:" + userName + " 处理订单");if (n > 0) {int num = MAX - n + 1;System.out.println("用户:" + userName + "购买第" + num + "台,剩余" + (--n) + "台");} else {System.out.println("用户:" + userName + "无法购买,已售罄!");}DLock.releaseLock("Huawei Mate 10", identifier);}
 
1.1 应用场景
应用场景
电商秒杀是一种网上竞拍活动,通常商家会在平台释放少量稀缺商品,吸引大量客户,平台会收到平时数十倍甚至上百倍的下单请求。但是只有少数客户可以下单成功。电商秒杀系统的分流过程可以分为以下几个步骤:
用户请求进入系统:当用户发起秒杀请求时,请求会首先进入负载均衡服务器。
负载均衡:负载均衡服务器会根据一定的算法将请求分发给后端多台服务器,以达到负载均衡的目的。负载均衡算法可以采用轮询、随机、最少连接数等方式。
业务逻辑处理:后端服务器接收到请求后,进行业务逻辑处理,并根据请求的商品数量、用户身份等信息进行校验。
库存扣减:如果库存充足,后端服务器会进行库存扣减操作,并生成订单信息,返回给用户秒杀成功的信息;如果库存不足,则返回给用户秒杀失败的信息。
订单处理:后端服务器会将订单信息保存到数据库中,并进行异步处理,例如发送消息通知用户订单状态。
缓存更新:后端服务器会更新缓存中的商品库存信息,以便处理下一次秒杀请求。
秒杀过程中多次访问数据库,下单通常是利用行级锁进行访问限制,抢到锁才能查询数据库和下单。但是秒杀时的大量订单请求,往往使数据库访问阻塞。
2 体验插件的魅力
华为云devkit已上线:Toolkit-华为云
相关文章:
华为云应用中间件DCS系列—Redis实现(电商网站)秒杀抢购示例
云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:应用中间件系列之Redis实现(电商网站)秒杀抢购示例 1 什么是DEVKIT 华为云开发者插件(Huawei Cloud Toolkit)&…...
EasyExcel导出带有下拉框的表头模板
1.接口层 ApiOperation("其他费用配置-模版下载")GetMapping("/downloadTemplate")public void downloadTemplate(HttpServletResponse response) {try {List<String> list Arrays.asList("集团", "平台", "部门", &…...
fastadmin找不到后台控制器。登录之后找不到后台控制器
nginx加配置项 伪静态那块 location / { if (!-e KaTeX parse error: Expected }, got EOF at end of input: … rewrite ^(.*) /index.php?s 1 l a s t ; b r e a k ; r e w r i t e ( . ? p ˙ h p ) ( / . ) 1 last; break; rewrite ^(.?\.php)(/.) 1last;break;rewrit…...
浅谈智能操控及无线测温产品在马来西亚理文造纸雪邦热电站项目中的应用
摘要:为避免因电线接头松动、电缆老化等引发高温造成火灾,所造成的的经济损失巨大,在一些电气设备如大电流电缆设备节点、电力设备局部异常升温部位、开关柜的动静触头,进线与出线母排接点、整流柜中的电气接点、变压器节点、变电…...
打开 Java 新的大门,Solon v2.5.10 发布
Solon 是什么框架? Java 生态级应用开发框架。从零开始构建,有自己的标准规范与开放生态(历时五年,具备全球第二级别的生态规模)。与其他框架相比,解决了两个重要的痛点:启动慢,费内…...
unity动画_UI动画案例 c#
首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 创建基础通用包 在场景上创建一个Cube 选中Cube 在Window下点击Animation拖拽至运行窗口 点击创建 保存后 这个操作是给Cube添加了一个组件 对Cube_添加一个Position动画 设置几个帧位置的坐标(x,y,z)值 点击运行测…...
“岗课赛证”融通的物联网综合实训室建设方案
一、概述 随着5G技术的普及应用和产业经济的革新发展,物联网产业所呈现的广阔前景带来了对创新型技术技能人才的迫切需求。高职院校物联网专业建设也因此转变为面向国家战略性新兴产业发展需求。当前,“岗位课程竞赛证书”融通的培育理念,是高职院校物联网人才培养和专业优化的…...
Python自动化运维实战——Telnetlib和Netmiko自动化管理网络设备
❤️博客主页: iknow181🔥系列专栏: Python、JavaSE、JavaWeb、CCNP🎉欢迎大家点赞👍收藏⭐评论✍ 目录 一、前言 二、准备工作 三、Telnetlib Telnetlib介绍 Telnetlib模块及操作方法介绍 Telnetlib配置设备 T…...
中文编程开发语言工具开发的实际软件案例:称重管理系统软件
中文编程开发语言工具开发的实际软件案例:称重管理系统软件 中文编程开发语言工具开发的实际软件案例:称重管理系统软件,软件可以安装在电脑上,也可以安装在收银机上,支持触摸和鼠标点,想学编程可以关注系统…...
CSS如何画出平行四边形
其实如果项目中有这样的画图 还是会用到的比如 看起来样子怪怪的 哈哈 但是确实可以完成一些需求哈哈哈 这个就要用到一个css3转换的一个 属性了 skew 让一个元素再平面上进行倾斜 div {width: 200px;height: 50px;background-color: #f00;transform: skew(20deg);margin: 100…...
【计算机网络笔记】计算机网络性能(1)——速率、带宽、延迟
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 系列文章目录速率带宽延迟/时延(delay或latency) 下面介绍一些计算机网络中常用的性能指标。在本篇中涉及速…...
数字孪生与智慧城市:重塑未来城市生活的奇迹
今天,我们将探讨数字孪生和智慧城市两个颠覆性技术,它们正引领着未来城市生活的巨大变革。随着科技的飞速发展,数字孪生和智慧城市成为实现可持续发展和提升居民生活质量的关键策略。 数字孪生:实现现实与虚拟的完美融合 数字孪生…...
大势智慧是否支持航拍图片生成3D建模?
答:支持的,重建大师软件可以导入照片完成三维建模。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网格模型,可…...
ASO优化之增加APP应用下载安装量的技巧1
想要增加APP应用的下载安装量,首先要在发布之前,分析我们的应用推广策略该如何运作并进行调整。提高知名度的基础是关键词,其次使用社交网络来推广我们的应用程序。 1、基础与规划。 在启动应用程序或者是实行ASO计划之前,需要了…...
点云从入门到精通技术详解100篇-雨雾环境下多传感器融合SLAM方法
目录 前言 国内外研究现状 传统SLAM研究现状 多传感器融合SLAM研究现状...
electron安装失败时配置
electron下载前配置 使用命令打开npm全局配置,C盘下的.npmrc文件。 npm config edit 然后在空白处添加 electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/ electron_mirrorhttps://cdn.npmmirror.com/binaries/electr…...
酷开科技为你的电视增添魅力,点亮每一个娱乐瞬间!
有没有想过有一天,你的电视可以像超人一样,为你的每一个娱乐时刻带来炫酷的观影体验。酷开科技,作为智能电视领域内的领军企业,正是你期待的那个“超人”,不妨让我们探索一下酷开科技的独特魅力,为你枯燥乏…...
Spring Cloud 之 Feign 简介及简单DEMO的搭建
Feign简介: Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验。 Feign是在RestTemplate基础上封装的,使用注解的方式来声明一组与服务提供者Rest接口所对应的本地…...
SAS国际认证考试报名流程
文章目录 注册SAS账号登录SAS账号预约考试考试注意事项 注册SAS账号 SAS考试报名入口:https://home.pearsonvue.com/sas 注册SAS账号 邮箱验证 点击上述邮件发送来的链接,跳转到如下界面。输入密码即可。 完成注册。选择login。 登录SAS账号 输入Email …...
CSS 什么是外边距重叠?重叠的结果是什么?
外边距重叠是CSS中的一种现象,当两个(或更多)相邻的元素具有外边距时,它们的外边距可能会合并(重叠)成一个较大的外边距,而不是简单地叠加在一起。外边距重叠通常出现在垂直方向上,有…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
