zoukankan      html  css  js  c++  java
  • 也来谈幂等和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的值才会被设置为新的值,否则不处理。

  • 相关阅读:
    golang的string是包使用
    OTHER状态的mongodb副本集成员转换为独立的新副本集primary
    linux命令行快捷键
    如何配置vcodes成最美观的样子,让你从此爱上代码
    记一次Lock wait timeout异常的排查过程
    mysql变更上线流程
    go build 使用
    Makefile文件
    解决 windows10系统和AOC显示器时不时地闪现黑屏问题
    feign调用添加header参数
  • 原文地址:https://www.cnblogs.com/zhoukedou/p/7020556.html
Copyright © 2011-2022 走看看