幂等性
update tablename set version= version+1 where version=#{version}
1、什么是幂等性?
一次请求或多次请求执行的结果是一样的。
2、如何来实现幂等性
2.1 前端层面
在前端实现,按钮一次点击后置灰不可用,禁止用户多次点击;
2.2 数据库层面
2.2.1 通过数据库表的唯一索引来实现,当插入重复数据时数据库会抛异常,从而避免了脏数据的插入;
2.2.2 通过乐观锁来实现,为数据库表增加版本version字段,更新前先去获取version版本号,
select version from tablename where xxx
更新时首先和版本号进行比对,版本号一致则更新,不一致则更新失败。
update tablename set version = version+1 where version = #{version}
2.3 程序层面
2.3.1 通过悲观锁来实现,在获取数据时进行加锁,其他线程只能等该线程释放锁之后才能进行操作。
2.3.2 通过redis或zookeeper分布式锁来实现,在分布式环境下,锁定全局唯一资源,使请求串行化;
2.3.3 通过token机制来实现, token机制的核心思想是为每一次操作生成一个唯一性的凭证,也就是token。一个token在操作的每一个阶段只有一次执行权,一旦执行成功则保存执行结果。对重复的请求,返回同一个结果。
原文链接: https://juejin.cn/post/6894624582091669517
你想拥有什么,你就去追求什么!