Redis - Redisson

目录

可重入锁

 MultiLock: 连锁

 代码实现:

布隆过滤器


Redis实现的分布式锁还存在一下问题:

 Redisson可以全部解决以上问题

1. Redisson获取的锁是可重入的锁

RLock lock = redissonClient.getLock("lock:order"); 

2. waitTime为重试时间,leaseTime为持有的超时时间

lock.tryLock(long waitTime, long leaseTime, TimeUnit unit)

3.不设置leaseTime,可以解决超时释放带来的并发安全隐患

4.解决主从一致性问题,采用连锁,多个节点都为主节点。同时获取全部节点的锁。

 引入依赖

        <!-- redisson -->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.17.5</version>
        </dependency>

添加配置

@Configuration
public class RedissonConfig {

    @Bean
    public RedissonClient redissonClient() {
        //配置
        Config config = new Config();
        //添加Redis地址,这里添加单点地址,也可以使用config.useClusterServers()添加集群地址
        config.useSingleServer().setAddress("redis://192.168.99.100:56379").setPassword("123321");
        //创建Redis对象
        return Redisson.create(config);
    }
}

使用Redisson提供的分布式锁

@Service
public class DistributePayImpl implements SinglePay {

    @Autowired
    SimpleRedisLock simpleRedisLock;

    @Autowired
    RedissonClient redissonClient;

    public void buyOrder(Long userId) {
        buyOrder_RedissionLock(userId);
    }

    private void buyOrder_RedissionLock(Long userId){
        String lockKey = "lock:order:" + userId;
        //使用Redisson获取锁
        RLock lock = redissonClient
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值