Redis生成分布式自增ID

使用redis的RedisAtomicLong可以生成分布式自增的ID值。
SequenceFactory是封装的一个工具类,利用redisTemplate生成自增ID,实现如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.concurrent.TimeUnit;

@Service
public class SequenceFactory {
    @Autowired
    RedisTemplate redisTemplate;

    /** * @param key * @param value * @param expireTime * @Title: set * @Description: set cache. */
    public void set(String key, int value, Date expireTime) {
        RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        counter.set(value);
        counter.expireAt(expireTime);
    }

    /** * @param key * @param value * @param timeout * @param unit * @Title: set * @Description: set cache. */
    public void set(String key, int value, long timeout, TimeUnit unit) {
        RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        counter.set(value);
        counter.expire(timeout, unit);
    }

    /** * @param key * @return * @Title: generate * @Description: Atomically increments by one the current value. */
    public long generate(String key) {
        RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        return counter.incrementAndGet();
    }

    /** * @param key * @return * @Title: generate * @Description: Atomically increments by one the current value. */
    public long generate(String key, Date expireTime) {
        RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        counter.expireAt(expireTime);
        return counter.incrementAndGet();
    }

    /** * @param key * @param increment * @return * @Title: generate * @Description: Atomically adds the given value to the current value. */
    public long generate(String key, int increment) {
        RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        return counter.addAndGet(increment);
    }

    /** * @param key * @param increment * @param expireTime * @return * @Title: generate * @Description: Atomically adds the given value to the current value. */
    public long generate(String key, int increment, Date expireTime) {
        RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        counter.expireAt(expireTime);
        return counter.addAndGet(increment);
    }
}

你可能感兴趣的:(Redis)