1、上一篇说的流水号自动增长,存在两个问题,第一如果编号是字母+数字格式的,数字自增可以使用AtomicInteger实现,但是与字母组合拼接肯定是一个非原子、非线程安全的,可以通过线程同步实现;第二是如果服务集群部署,涉及到分布式锁问题。
下面的这个例子就是解决分布式环境下实现流水号自动增长的功能,通过线程同步+redis分布式锁实现。
代码实例如下:
@Service
public class DistributedLock {
@Autowired
private IRedisDao redisDao;
@Autowired
private IUserDao userDao;
//用户编码当前最大值,存储在redis中的key
private static final String CURRENT_MAX_USER_CODE_KEY = "CURRENT_MAX_USER_CODE_KEY";
//用户编码前缀
private final static String PRE_GROUP_CODE = "w";
//用户编码初始值,格式:前缀+8000000开始的流水,如:w8000001
private