
一、前言
今天本来应该学习netty基础传输的相关内容,但是由于对基础知识掌握的不足,出现学习的瓶颈,先学习一下幂等性压压惊,晚上再梳理一下netty的相关内容,认认真真学习,争取明晚可以完成netty基础传输相关内容,今晚就看一下幂等性吧!
二、什么是幂等性?
百度百科的解释
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现。
理解
所谓幂等性,就是无论执行多少次,都会只执行一次,多次的影响和一次是一样的,比如我们新增用户,无论执行多少次,都只会保存一次,避免了重复提交
幂等性运用的范围也是很多,比如以下几个:
- 保存用户信息,前端重复提交相同的数据,后端接口对于这个数据只会保存一次,无论重新提交多少次,也只会完成一次
- 用户支付,无论提交多少次,他只能有一次成功,只能扣一次钱
- **验证码,**相同的的验证码只能发送一次,不能重复发送 等等
三、实现幂等性
1、实现的方式
- mysql的唯一索引,如果索引存在,就会抛出异常,也就保证了重复提交问题
- 悲观锁
- 乐观锁
- redis实现,将生成的token保存在redis中,提交之后,将token删除,重复发起请求,获取不到redis存储的token就无法重复提交,直接提示用户:重复保存
<