解决同时操作引发的问题

ublic class MessageRedisUtil {

/**
 * redis中设置的key 关键字
 */
private static final String REDIS_MESSAGE_NX_KEY = "REDIS_MESSAGE_NX_KEY";

/**
 * Redis 过期时间
 * 设置过期时间为10分钟
 */
private static final int EXPIRE_SECONDS = 600;

/**
 * 校验锁是否存在
 * 如存在返回true
 * 不存在返回false
 * @return
 */
public static synchronized boolean verifyRedisLock(Long id){

    return RedisClusterUtil.exists(REDIS_MESSAGE_NX_KEY+id);
}

/**
 * 设置RedisLock
 *
 * 成功返回true
 * 失败或已经存在 返回false
 *
 * @return
 * @param id
 */
public static synchronized boolean setRedisLock(Long id){

    long expire = 0;

    try{
        Long result = RedisClusterUtil.setnx(REDIS_MESSAGE_NX_KEY+id,REDIS_MESSAGE_NX_KEY+id);
        if (result != 1){
            return false;
        }
    }finally {
        if (RedisClusterUtil.exists(REDIS_MESSAGE_NX_KEY+id)){
            //设置有效期3分钟
            expire = RedisClusterUtil.expire(REDIS_MESSAGE_NX_KEY+id,EXPIRE_SECONDS);
        }
    }
    return expire != -1;
}

/**
 * 删除指定key
 * @return
 */
public static synchronized boolean delRedisLock(Long id){
    if (!RedisClusterUtil.exists(REDIS_MESSAGE_NX_KEY+id)){
        return true;
    }

    long result = RedisClusterUtil.del(REDIS_MESSAGE_NX_KEY+id);
    return result != -1;
}

}
一个redis工具类解决问题,这属于分布式锁的一种。redis里的setnx ex
在这里插入图片描述
就将你操作的id存进去,已锁返回false。用来避免重复操作,直接引到自己的项目里就可以了,简单方便,拿走不谢哈哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值