前言
在项目中许多过这样的需求,记录留做备忘。
需要创建一个递增序列,这个序列会提供给多个应用来使用,这样就需要保持序列的原子递增。
RedisAtomicLong
spring-data-redis
包中提供的,可以对数据中的Long类型进行原子性操作的类,下面是这个类的头:
/**
* Atomic long backed by Redis. Uses Redis atomic increment/decrement and watch/multi/exec operations for CAS
* operations.
* * @see java.util.concurrent.atomic.AtomicLong
* @author Costin Leau
* @author Thomas Darimont
* @author Christoph Strobl
* @author Mark Paluch
*/
public class RedisAtomicLong extends Number implements Serializable, BoundKeyOperations<String> {
我们可以看到java.util.concurrent.atomic.AtomicLong,和java自带的atomic包一样进行原子性操作,两者不同的是:
AtomicLong
只能在一个应用中使用- RedisAtomicLong可以在所有与Redis有连接的应用中使用
开始优化
应用初始化时创建RedisAtomicLong实例。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.jiu.common.redis;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import