幂等性

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

    

 

posted @ 2021-06-10 16:20  沉默小和尚  阅读(165)  评论(0编辑  收藏  举报