基于Redis官方推荐-分布式锁最佳实践介绍

DBC 1.6K 0

简介:redis官方推荐-分布式锁最佳实践

添加pom
    <!--分布式锁-->
            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson</artifactId>
                <version>3.10.1</version>
            </dependency>
创建一个AppConfig类
import lombok.Data;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@Data
public class AppConfig {


    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.port}")
    private String redisPort;


    @Value("${spring.redis.password}")
    private String redisPwd;


    /**
     * 配置分布式锁的redisson
     * @return
     */
    @Bean
    public RedissonClient redissonClient(){
        Config config = new Config();

        //单机方式
        config.useSingleServer().setPassword(redisPwd).setAddress("redis://"+redisHost+":"+redisPort);

        //集群
        //config.useClusterServers().addNodeAddress("redis://192.31.21.1:6379","redis://192.31.21.2:6379")

        RedissonClient redissonClient = Redisson.create(config);
        return redissonClient;
    }

}
来看实现类
    @GetMapping("lock")
    public JsonData testLock() {


        RLock lock = redissonClient.getLock("lock:coupon:1");

        //阻塞等待
        //lock.lock(10,TimeUnit.MILLISECONDS);
        lock.lock();

        try {

            log.info("加锁成功,处理业务逻辑。。。。。。" + Thread.currentThread().getId());
            TimeUnit.SECONDS.sleep(20);

        } catch (Exception e) {

        } finally {
            log.info("解锁成功,其他线程可以进去。。。。。。" + Thread.currentThread().getId());
            lock.unlock();
        }

        return JsonData.buildSuccess();

    }

发表评论 取消回复
表情 图片 链接 代码

分享