首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
下列哪些方案可实现幂等
[不定项选择题]
下列哪些方案可实现幂等
数据库唯一主键
数据库乐观锁
Token令牌
数据库自增ID
查看正确选项
添加笔记
求解答(2)
邀请回答
收藏(45)
分享
纠错
2个回答
添加回答
4
Awybupt
幂等的意思是相同的请求参数有相同的响应
发表于 2021-09-16 01:07:05
回复(0)
3
咖啡布洛芬
可以实现幂等的方案
1.数据库唯一主键
数据库
唯一主键
的实现主要是利用数据库中主键唯一约束的特性,一般来说唯一主键比较适用于“插入”时的幂等性,其能保证一张表中只能存在一条带该唯一主键的记录
使用数据库唯一主键完成幂等性时需要注意的是,该主键一般来说并不是使用数据库中自增主键,而是使用分布式 ID 充当主键,这样才能能保证在分布式环境下 ID 的全局唯一性
适用于插入操作和删除操作,但是需要生成全局唯一主键 ID
2.数据库乐观锁
一般只能适用于执行
更新操作
的过程,可以提前在对应的数据表中多添加一个字段,充当当前数据的版本标识
这样每次对该数据库该表的这条数据执行更新时,都会将该版本标识作为一个条件,值为上次待更新数据中的版本标识的值
适用于更新操作,但是需要数据库对应业务表中添加额外字段
3.防重Token令牌
针对客户端连续点击或者调用方的超时重试等情况,例如提交订单,此种操作就可以用 Token 的机制实现防止重复提交。
简单的说就是调用方在调用接口的时候先向后端请求一个全局 ID(Token),请求的时候携带这个全局 ID 一起请求(Token 最好将其放到 Headers 中),后端需要对这个 Token 作为 Key,用户信息作为 Value 到 Redis 中进行键值内容校验,如果 Key 存在且 Value 匹配就执行删除命令,然后正常执行后面的业务逻辑。如果不存在对应的 Key 或 Value 不匹配就返回重复执行的错误信息,这样来保证幂等操作
适用于插入操作、更新操作、删除操作
需要生成全局唯一Token串,还需要使用第三方组件Redis进行数据效验
4.下游传递唯一序列号
所谓
请求序列号
,其实就是每次向服务端请求时候附带一个短时间内唯一不重复的序列号,该序列号可以是一个
有序 ID
,也可以是一个
订单号
,一般由下游生成,在调用上游服务端接口时附加该序列号和用于认证的 ID。
当上游服务器收到请求信息后拿取该
序列号
和下游
认证ID
进行组合,形成用于操作 Redis 的 Key,然后到 Redis 中查询是否存在对应的 Key 的键值对,根据其结果:
如果存在
,就说明已经对该下游的该序列号的请求进行了业务处理,这时可以直接响应重复请求的错误信息。
如果不存在
,就以该 Key 作为 Redis 的键,以下游关键信息作为存储的值(例如下游商传递的一些业务逻辑信息),将该键值对存储到 Redis 中 ,然后再正常执行对应的业务逻辑即可。
适用于插入操作、更新操作、删除操作
要求第三方传递唯一序列号,还需要使用第三方组件 Redis 进行数据效验
发表于 2022-04-02 22:47:42
回复(1)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
golang工程师
PHP工程师
虾皮信息
Java工程师
信息技术岗
上传者:
小小
难度:
2条回答
45收藏
897浏览
热门推荐
相关试题
以下描述错误的是:()
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
测试工程师
安全工程师
大数据开发工程师
2018
奇安信
信息技术岗
评论
(0)
建物流中转站
数组
模拟
穷举
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
PHP工程师
测试工程师
虾皮信息
2019
golang工程师
评论
(48)
来自
Shopee 2019校...
Shopee的办公室(二)
动态规划
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
PHP工程师
测试工程师
虾皮信息
数学
2019
golang工程师
评论
(83)
来自
Shopee 2019校...
之前的经历中单品数据分析的经验丰富...
评论
(1)
2022 诺瓦科技 Perl re...
perl
System Verilog
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题