当前位置: 首页 > news >正文

网站分享平台网页设计与制作 培训

网站分享平台,网页设计与制作 培训,17网站一起做网店 发货慢,优秀网站展示目录 1.幂等性是什么? 2.如何实现幂等性呢? 1.新增管理员,出弹窗的同时,请求后台。 2.后端根据雪花算法生成唯一标识key,以雪花数为key存到redis。并返回key给前端。 3.前端保存后端传过来的key。 4.前端输入完成…

目录

1.幂等性是什么?

2.如何实现幂等性呢?

1.新增管理员,出弹窗的同时,请求后台。

2.后端根据雪花算法生成唯一标识key,以雪花数为key存到redis。并返回key给前端。

3.前端保存后端传过来的key。

4.前端输入完成信息,点击【保存】,携带key请求后端。

5.请求到达后端,验证key,根据key去redis里查,如果得不到值,说明已处理过。否则尝试获取redisson锁,然后处理业务,并删掉redis里的值。


1.幂等性是什么?

新增和修改功能的时候,常常需要用到幂等性。

所谓的幂等性就是,即使不小心多按了几次,仍然只执行一次。常用在下单、增量修改、插入数据的时候。

效果:

在同一时间狂点鼠标“新增”,或者jmter压测并发多线程访问这个接口,也执行一次新增。

 

2.如何实现幂等性呢?

本次案例采用,token+redis+分布式锁:

流程如下所示:

1.新增管理员,出弹窗的同时,请求后台。

//获取唯一标识beforeAdd() {setTimeout(() => {this.dialogAdd = true;}, 500);//请求后台拿唯一标识(this.imageUrl = ""),this.$axios.get("/api/pc-zdy-sys/admin/preAddAdmin").then((res) => {if (res.data.code == 200) {this.allRoleList = res.data.data.allRoleList; //系统里所有的角色this.key = res.data.data.key; //唯一标识key}});},

2.后端根据雪花算法生成唯一标识key,以雪花数为key存到redis。并返回key给前端。

 public String preAddAdmin() {//雪花id 为key存到redis 值可以无意义Long snowflakeNextId = IdUtil.getSnowflakeNextId();String key = String.valueOf(snowflakeNextId);redisTemplate.opsForValue().set(key,"唯一标识");//返回雪花idreturn key;}

3.前端保存后端传过来的key。

data() {return {key: "", //唯一标识key};},

4.前端输入完成信息,点击【保存】,携带key请求后端。

confirmAdd() {//key带到后台去,请求接口确认新增this.AddAdmin.url = this.imageUrl;this.AddAdmin.key = this.key;if(this.isAnyFieldEmpty){this.$message({message: "不能为空",type: "danger",});return;}this.$axios.post("/api/pc-zdy-sys/admin", this.AddAdmin).then((res) => {if (res.data.code == 200) {this.$message({message: "恭喜你,新增成功",type: "success",});this.dialogAdd = false;this.queryAdmin()}}).catch((error) => {this.$message({message: "新增失败",type: "danger",});});},

5.请求到达后端,验证key,根据key去redis里查,如果得不到值,说明已处理过。否则尝试获取redisson锁,然后处理业务,并删掉redis里的值。

public void addAdmin(UserDTO userDTO) {//根据key找是否有tokenString key = userDTO.getKey();if(StringUtils.isBlank(key)||ObjectUtil.isEmpty(redisTemplate.opsForValue().get(key))){//没有key或根据key找不到token直接抛异常throw new RuntimeException("新增失败");}//拿锁去处理RLock lock = redissonClient.getLock(key);boolean b = lock.tryLock();//如果拿锁失败if(!b){throw new RuntimeException("新增失败");}lock.lock();try {//admin加到用户表User user = new User();BeanUtils.copyProperties(userDTO,user);user.setStatus(1);userMapper.insert(user);//将userDTO里角色list加到角色-用户 中间表去//需要用户id 角色id集合userRoleMapper.addRoleListToUserRole(user.getId(),userDTO.getRoleList());//删掉缓存redisTemplate.delete(key);} catch (Exception e){e.printStackTrace();}finally {lock.unlock();}}

http://www.yayakq.cn/news/804574/

相关文章:

  • 1800做网站因为专业首页优化的公司
  • python做网站框架做网站需要什么人才
  • 如何自己做一个网站tug wordpress
  • 网站开发工具中的三剑客网站的关键词怎么选择
  • 上海建设学校网站信息技术课做网站
  • 微网站怎么免费做浏阳网站定制
  • 做蛋糕网站的 实训报告图优秀营销软文范例300字
  • 怎么创建网站建设传智播客黑马程序员
  • 免费空间网站怎么做出来的聊城做网站的公司价格
  • 室内设计欣赏网站餐饮环境评估在哪个网站做
  • 孔夫子旧书网网站谁做的wordpress极简免费主题
  • 东莞企业网站咨询linux系统做网站
  • 建一个自己的网站价格西乡城建局网站
  • 源码网站大淘客cms茂名手机网站制作
  • 自建网站步骤金融网站策划
  • 可视化网站建设平台广州网站建设工作室招聘
  • 网站html下载免费的网站cms
  • 广州网站开发 细致广州亦客网络百度搜索关键词排名优化
  • 网站开发开票内容要建立网站是否要先做网页设计_然后把网页设计与数据库连接起来?
  • 石家庄的网站建设公司网页页面设计模板
  • 红酒公司的网站建设 天堂资源地址在线官网
  • 安徽 电子政务网站定制唐山建设网站的网站
  • 如何能进腾讯做游戏视频网站asp网站图片轮播代码
  • 网站群建设意见西安网络推广平台公司
  • 网站建设验收合格确认书网站制作公司广州
  • 有多少专门做兼职的网站可以做投票的网站
  • 网站制作属于什么行业wordpress 支持 标签
  • 企业手机网站建设新闻企业信用信息公示系统网址年检
  • 郑州网站建设方案服务公司wordpress 登入 跳
  • 上海建材网站建设九江市广安建设工程有限公司网站