springboot通过redis实现分布式锁实现并调用

该博客介绍了如何在SpringBoot应用中利用Redis实现分布式锁,包括锁的创建、获取和释放过程。通过RedisTemplate操作Redis,使用setIfAbsent、getAndSet等方法确保锁的正确性,并提供了一个具体的RedisLock类作为示例。在锁的使用场景中,展示了如何避免重复请求,保护敏感操作。
摘要由CSDN通过智能技术生成


import org.springframework.data.redis.core.RedisTemplate;


public class RedisLock {


    private RedisTemplate redisTemplate;
    /**
     * 重试时间
     */
    private static final int DEFAULT_ACQUIRY_RETRY_MILLIS = 100;
    /**
     * 锁的后缀
     */
    private static final String LOCK_SUFFIX = "_redis_lock";
    /**
     * 锁的key
     */
    private String lockKey;
    /**
     * 锁超时时间,防止线程在入锁以后,防止阻塞后面的线程无法获取锁
     */
    private int expireMsecs = 60 * 1000;
    /**
     * 线程获取锁的等待时间
     */
    private int timeoutMsecs = 10 * 1000;
    /**
     * 是否锁定标志
     */
    private volatile boolean locked = false;


    /**
     * 构造器
     * 
     * @param redisTemplate
     * @param lockKey 锁的key
     */
    public RedisLock(String lockKey) {
        this.redisTemplate = (RedisTemplate) SpringContextUtil.getBean("clusterRedisTemplate");
        this.lockKey = lockKey + LOCK_SUFFIX;
    }


    /**
     * 构造器
     * 
     * @param redisTemplate
     * @param lockKey 锁的key
     * @param timeoutMsecs 获取锁的超时时间
     */
    public RedisLock(String lockKey, int timeoutMsecs) {
        this(lockKey);
        this.timeoutMsecs = timeoutMsecs;
    }


    /**
     * 构造器
     * 
     * @param redisTemplate
     * @param lockKey 锁的key
     * @param timeoutMsecs 获取锁的超时时间
     * @param expireMsecs 锁的有效期
     */
    public RedisLock(String lockKey, int timeoutMsecs, int expireMsecs) {
        this(lockKey, timeoutMsecs);
        this.expireMsecs = expireMsecs;
    }


    public String getLockKey() {
        return lockKey;
    }


    /**
     * 封装和jedis方法
     * 
     * @param key
     * @return
     */
    private String get(final String key) {
        Object obj &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值