也来谈幂等和CAS

Posted 周蝌蚪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了也来谈幂等和CAS相关的知识,希望对你有一定的参考价值。

什么是幂等?

一个方法,不管你执行多少次,保证执行的结果总是相同的。这种方法或者服务就是幂等的。

什么是CAS?

CAS是Compare And Set的缩写,顾名思义,就是先比较再设置,这种方式避免读写时的锁操作。一般配合重试操作。

这两个名词在软件开发的过程中经常会碰到,幂等的操作需要使用到合理的参数,保证幂等参数的唯一性。一般的情况下,方法调用的关键参数都可以作为幂等的条件。而CAS最为常见的就是数据库中使用的乐观锁,用来保证数据的一致性。

幂等的方法和CAS该怎么写呢?看下面的代码

public class Idempotent{
    private volatile int a = 0;
public int getAValue(int value){ if(a=0){ a = value + 1; }
    return a; } public void setAValueByVersion(int value,int oldValue){ if(a==oldValue){ a = value; } } }

当然,这个代码是存在并发问题的,我们姑且放过。主要表达下幂等和CAS的含义。

我们先看setAValue的方法,这个方法传入了一个参数value,但是方法对a进行了判断,如果a = 0才对a进行赋值,我们撇开并发问题,这个方法不管执行多少次,同样的value参数,返回的结果都是同一个。这也可以衍生到我们平时的编码中,在编码时,写幂等方法时一般先判断是否已经有处理相关的业务,如果有处理,直接返回结果。

第二个方法是CAS的例子,当a的值与传递的oldvalue的值相等是,a的值才会被设置为新的值,否则不处理。

以上是关于也来谈幂等和CAS的主要内容,如果未能解决你的问题,请参考以下文章

幂等和高并发在电商系统中的使用

幂等和非幂等的理解

来谈下高并发和分布式中的幂等处理

在后端中如何实现幂等和去重?

在后端中如何实现幂等和去重?

JavaScript-也来谈--闭包