什么是幂等性
用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用
- 我们可以借鉴数据库的乐观锁机制
- 比如我们执行一条更新库存的SQL语句
- UPDATE T_REPS SET COUNT = COUNT -1,VERSION = VERSION +1 WHERE VERSION = 1
唯一ID +指纹码 机制
- 唯一ID + 指纹码机制,利用数据库主键去重
- SELECT COUNT(1) FROM T_ORDER WHERE ID = 唯一ID + 指纹码
- 好处:实现简单
- 坏处:高并发下有数据库写入的性能瓶颈
- 解决方案:跟进ID进行分库分表进行算法路由
利用Redis原子特性实现
- 使用Redis进行幂等,需要考虑的问题
- 第一:我们是否要进行数据落库,如果落库的话,关键解决的问题是数据库和缓存如何做到原子性?
- 第二:如果不进行落库,那么都存储到缓存中,如何设置定时同步的策略?