数据库新增幂等操作_幂等性-菜鸟辗迟-博客园
经过:
自己如何缴纳社保今天去⾯试了,⾯试官问我库存做扣减的时候,如何确保幂等性,说实话当时我有点⼤脑空⽩,虽然以前也看过幂等性相关的知识,但是不知怎的,竟然词穷了。废话说完了,开始正题。
什么是幂等性
百度了⼀下,幂等性是⽤户对同⼀个操作执⾏⼀次和执⾏多次的结果是⼀样的;对于数据库的幂等性来说,查询和删除操作是幂等的,也就是说,同⼀个查询操作,不管查询多少次,结果都是⼀样的;
对于删除来说,不管删除多少次,最终结果都是把⼀条数据给删除了,所以幂等性也可以说是针对结果的,也就是多次相同操作,造成的结果⼀样,那就是幂等的;对于新增和修改则就不是幂等的,所以关于幂等操作,数据库的操作主要是新增和修改;
怎么实现幂等性
南京大屠杀纪念日是哪一天我当时在回去的路上就百度了⼀下幂等性,然后⼜和朋友聊了⼀下,然后我想到的如下,可能会有理解不到位的地⽅,欢迎⼤家多多指正,共同学习,共同进步:
⾸先要确定是哪种模式下的(单机直接操作数据库、分布式调⽤库存系统),以下都以减少库存为例:
验车流程在单机直接操作数据库修改的情况下,如果只是单机调⽤⼀个⽅法减少库存,那么对应的数据库操作就是对库存表的对应的库存数量扣减;那么会有如下操作:
⾸先查询该种产品是否扣减成功,如果已经扣减成功,则不做操作,如果没有扣减成功,那么则执⾏扣减操作;
所以操作的时候要增加⼀个是否扣减成功的标志,就⽐如如下Sql:
update tbl_stock set num = (原有数量-要扣减的数量), 扣减标识=‘成功’ where id = '' and 扣减标识 <> '成功'
什么不什么什么成语正常情况下,直接通过主键id去修改数量就可以了,现在再增加 扣减标识 的判断就可以做到幂等,当然'成功'也可以换成是订单ID或线程ID,能确定是同⼀个操作的值即可;
在单机直接操作数据库新增的情况下,⽐如每次扣减库存是增加⼀条扣减记录,那么同⼀个操作,添加两条扣减记录就是不幂等的;怎么确保不管操作多少次,同⼀个操作的结果都是⼀样的;
添加唯⼀列,也就是,添加的记录⾥有⼀列是唯⼀的,那么同⼀个操作,多次执⾏,只有⼀次会成功,其它的都⽆法添加第⼆条;飞利浦台灯
在分布式系统的操作中,在⽹上看了⽹友说的使⽤redis和tocken什么的,还是不太明⽩,欢迎各位⼤佬留⾔。炖鸡汤放什么材料好吃
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论