Huaguoshan первые приматы тест размещения Запись --Talk дешев, Покажите мне код

Эта история является чисто фиктивным и любое их сходство является чисто случайным!

Фоновая история

Huaguoshan первых тест Запись обезьяны - обезьяны, согласно достичь уровня, определяющего счетчика

 

После того, как Гоку наставничества 4 люди учатся, чтобы вернуться, потому что нетерпимость получить дисциплину, вернулся цветов и фруктов горы, привело банда обезьян обезьян ВС не влияет жить, это прискорбно, потому что книга обезьяна обезьяна Солнца жизни и смерти во имя дворца ада Мы вычеркнуты, и обезьяна обезьяны вС растет.

Huaguoshan первых тест Запись обезьяны - обезьяны, согласно достичь уровня, определяющего счетчика

 

Укун является наиболее нетерпеливым, неспособным к дисциплине, с советом к Taibaijinxing.

Huaguoshan первых тест Запись обезьяны - обезьяны, согласно достичь уровня, определяющего счетчика

 

Тест размещения Apes

Taibaijinxing в его уме: экзаменационный.

И дали название:

Создать универсальный счетчик, измерение может быть много вещей, таких как Monkey King Bar.

Huaguoshan первых тест Запись обезьяны - обезьяны, согласно достичь уровня, определяющего счетчика

 

Ссылка ответ выглядит следующим образом:

Приматы в фазах: а ~ девять уровней последовательно расти

приматы первого порядка

общественный  класс Counter1 {
     частный  статический  ИНТ CNT = 0 ; 
    
    общественное  ИНТ увеличение () {
         возвращение ++ НКТ; 
    } 
    
    Общественного  ИНТ уменьшение () {
         возвращение - CNT; 
    }     
    
}

 

Рассказчик: для достижения этой функции.

приматы второго порядка

public class Counter2 {
    private static long cnt=0;
    
    public long increase() {
        return ++cnt;
    }
    
    public long decrease() {
        return --cnt;
    }        
}

 

旁白:考虑了int的范围限制,long的范围更广泛。

三阶猿类

public class Counter3 {
    private static long cnt=0;
    
    public synchronized long increase() {
        return ++cnt;
    }
    
    public synchronized long decrease() {
        return --cnt;
    }        
}

 

旁白:考虑了并发环境下的执行

四阶猿类

public class Counter4 {
    private static AtomicLong cnt=new AtomicLong(0);
    
    public long increase() {
        return cnt.getAndIncrement();
    }
    
    public long decrease() {
        return cnt.getAndDecrement();
    }        
}

 

旁白:考虑了并发环境下的cas性能更优

五阶猿类

public class Counter5 {
    private static LongAdder cnt=new LongAdder();
    
    public long increase() {
        cnt.increment();
        return cnt.longValue();
    }
    
    public long decrease() {
         cnt.decrement();
         return cnt.longValue();
    }        
}

 

旁白:在单线程下,并发问题没有暴露,两者没有体现出差距;随着并发量加大,LongAdder 的 increment 操作更加优秀,而 AtomicLong 的 get 操作则更加优秀。鉴于在计数器场景下的特点—写多读少,所以写性能更高的 LongAdder 更加适合。

六阶猿类

public class Counter6 {
    private static JdbcTemplateUtils jdbc=new JdbcTemplateUtils();
    private static long cnt=0;
    
    public long increase() {
        cnt=jdbc.getCnt();    
        return jdbc.setCnt(++cnt);
    }
    
    public long decrease() {
         cnt=jdbc.getCnt();
         return jdbc.setCnt(--cnt);;
    }        
}

 

旁白:考虑了在集群环境下保证数据的唯一性和一致性。

七阶猿类

public class Counter7 {
    private static RedisclusterUtils redis=new RedisclusterUtils();
    private static long cnt=0;
    
    public long increase() {    
        return redis.incr(cnt);
    }
    
    public long decrease() {
         return redis.decr(cnt);;
    }        
}

 

旁白:考虑了计数器集群下的并发性能问题,同样的实现可以使用zk或者mongo等内存数据库。

八阶猿类

public class Counter8 {
    private static JdbcTempalteUtils jdbc=new JdbcTempalteUtils();
    private static RedisclusterUtils redis=new RedisclusterUtils();
    private static long cnt=0;
    
    public long increase() {    
        if(redis.exsits(cnt)) {
            return redis.incr(cnt);
        }
        cnt=jdbc.getCnt(key);
        ++cnt;
        redis.set(key,cnt);
        
        return cnt;
    }
    
    public долгое уменьшение () {
         если (redis.exsits (CNT)) {
             возвращение redis.decr (CNT); 
        } 
        CNT = jdbc.getCnt (ключ);
        - CNT; 
        redis.set (ключ, CNT); 
        
        вернуться НКТ; 
    }         
}

 

VO: Рассмотрим случай, когда Redis обработки вниз или недоступен, программа резервного копирования.

Девять полос приматы

Это должно освобождение.

Huaguoshan первых тест Запись обезьяны - обезьяны, согласно достичь уровня, определяющего счетчика

 

Ссылки:

【1】 https://mp.weixin.qq.com/s/yAvJFZWxfKb38IDMjQd5zg

рекомендация

отwww.cnblogs.com/davidwang456/p/11550965.html