千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  1分钟解决高并发重复提交Redis(幂等性)问题

1分钟解决高并发重复提交Redis(幂等性)问题

来源:千锋教育
发布人:lxl
时间: 2023-03-10 14:52:00

高并发重复提交Redis的问题

  一. 幂等性

  所谓的幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。

  也就是说,用户对于同一操作,无论是发起一次请求还是多次请求,最终的执行结果是一致的,不会因为多次点击而产生副作用。

  二. 编程幂等性

  在我们进行代码实现时,常见的请求有如下几种,他们的幂等性如下:

  select查询天然幂等; delete删除也是幂等,删除同一个数据多次其效果一样; update直接更新某个值时,幂等; update更新累加操作的的结果,非幂等; insert操作会每次都新增一条,非幂等;

  三. 什么情况下会产生重复提交(非幂等性

  以下几种情况会导致非幂等性的结果出现:

  •   连续点击提交两次按钮;
  •   点击刷新按钮;
  •   使用浏览器后退按钮重复之前的操作,导致重复提交表单;
  •   使用浏览器历史记录重复提交表单;
  •   浏览器重复的HTTP请求等。

  四. 解决方案

  我们在开发时,解决幂等性的常见方式有以下几种:

  1、前端js提交禁止按钮可以用一些js组件

  2、使用Post/Redirect/Get模式

  在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

  3、借助数据库操作

  insert唯一索引,保证插入的数据只有一条。另外也可以基于悲观锁或者乐观锁,先查询后判断,首先通过查询数据库是否存在数据,如果存在证明已经请求过了,直接拒绝该请求;如果没有存在,就证明是第一次进来,直接放行。

  4、session机制(后台服务端)

  在服务器端,生成一个唯一的标识符,将它存入session,同时将它写入表单的隐藏字段中,然后将表单页面发给浏览器,用户录入信息后点击提交。另外在服务器端,获取表单中隐藏字段的值,与session中的唯一标识符比较,如果相等说明是首次提交,就处理本次请求,然后将session中的唯一标识符移除,如果不相等即重复提交。

  5、Redis token机制

  每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证。如果验证通过删除token,下次请求再次判断token是否相等,如果不相等即重复提交。

  五. Redis token的代码实现

  接下来我就把Redis token方式的实现代码列出,如下所示:

 

  以上代码用来生成保证幂等性的token,我们会发现代码并不复杂。现在你知道怎么保证幂等性了吗?

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>