Java幂等性相关问题

幂等性的相关问题

1、什么是幂等性

用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作用。

2、为什么需要幂等性

简单业务场景: 当订单业务到了支付时、已经支付成后、由于网络或者服务器宕机等原因。导致未响应结果。 这时多次点击支付、若没有幂等性那么则会出现多次付款。 常见幂等性体现【Seata中TCC模式】。

3、幂等性的缺点

增加代码复杂度、并行改编成了串行,降低了执行效率。

4、如何保证幂等性

  • 前端拦截
    • 例如按钮的点击次数限制
  • 使用数据库实现幂等性、
    • 乐观锁
      • 通过更新版本号实现
    • 悲观锁
      • 查询状态、添加操作、更改操作由于是非原子性的,那么可能得不到数据的一致性。应配合事务进行处理。
    • 全局ID
      • 雪花算法
      • 唯一索引
  • 使用JVM锁实现幂等性
    • JVM锁实现是指通过JVM提供的内置锁,如Lock或者是Synchronuzed来实现幂等性
      • 流程:通过Lock对代码段进行加锁操作、然后在判断此订单是否已经被处理过,如果未处理则开启事务执行订单处理、处理完成之后提交事务、释放锁。【适用于单机锁、分布式不适用】
  • 使用分布式锁实现幂等性
    • 在每次执行方法之前、先判断是否可以获取到分布式锁,如果可以。则表示为第一次执行方法、否则直接放弃请求。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中设计幂等性接口,可以使用自定义注解来实现。可以参考引用中的自定义注解`@Idempotent`。这个注解可以应用在方法上,用于标识该方法是否需要实现幂等性。注解中的属性包括: - `isIdempotent`: 用于指示是否需要对该方法进行幂等性处理,默认为false,表示不需要处理。 - `expireTime`: 用于指定幂等性的有效期,单位为秒,默认为1秒。这个有效期要大于方法执行的时间,以确保在有效期内重复的请求不会被处理。 - `timeUnit`: 用于指定有效期的时间单位,默认为秒。 - `info`: 用于指定提示信息,可以自定义,默认为"重复请求,请稍后重试"。 - `delKey`: 用于指示在业务完成后是否删除幂等性处理所使用的key,默认为false,表示不删除。 通过在需要实现幂等性的方法上添加`@Idempotent`注解,并根据业务需求配置相应的属性,可以实现对接口的幂等性处理。这样,在重复的请求中,系统可以根据幂等性的处理逻辑返回同一个结果或报错,以避免对系统资源的重复影响。123 #### 引用[.reference_title] - *1* *2* *3* [【技术应用】java接口幂等性实现方案](https://blog.csdn.net/weixin_37598243/article/details/128403043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值