Redission快速入门

Redission快速入门

引入依赖:

<dependency>
	<groupId>org.redisson</groupId>
	<artifactId>redisson</artifactId>
	<version>3.13.6</version>
</dependency>

配置Redisson客户端:

@Configuration
public class RedissonConfig {

    @Bean
    public RedissonClient redissonClient(){
        // 配置
        Config config = new Config();
        config.useSingleServer().setAddress("redis://192.168.150.101:6379")
            .setPassword("123321");
        // 创建RedissonClient对象
        return Redisson.create(config);
    }
}

如何使用Redission的分布式锁

@Resource
private RedissionClient redissonClient;

@Test
void testRedisson() throws Exception{
    //获取锁(可重入),指定锁的名称
    RLock lock = redissonClient.getLock("anyLock");
    //尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位
    boolean isLock = lock.tryLock(1,10,TimeUnit.SECONDS);
    //判断获取锁成功
    if(isLock){
        try{
            System.out.println("执行业务");          
        }finally{
            //释放锁
            lock.unlock();
        }
        
    }
    
    
    
}

在 VoucherOrderServiceImpl

注入RedissonClient

@Resource
private RedissonClient redissonClient;

@Override
public Result seckillVoucher(Long voucherId) {
        // 1.查询优惠券
        SeckillVoucher voucher = seckillVoucherService.getById(voucherId);
        // 2.判断秒杀是否开始
        if (voucher.getBeginTime().isAfter(LocalDateTime.now())) {
            // 尚未开始
            return Result.fail("秒杀尚未开始!");
        }
        // 3.判断秒杀是否已经结束
        if (voucher.getEndTime().isBefore(LocalDateTime.now())) {
            // 尚未开始
            return Result.fail("秒杀已经结束!");
        }
        // 4.判断库存是否充足
        if (voucher.getStock() < 1) {
            // 库存不足
            return Result.fail("库存不足!");
        }
        Long userId = UserHolder.getUser().getId();
        //创建锁对象 这个代码不用了,因为我们现在要使用分布式锁
        //SimpleRedisLock lock = new SimpleRedisLock("order:" + userId, stringRedisTemplate);
        RLock lock = redissonClient.getLock("lock:order:" + userId);
        //获取锁对象
        boolean isLock = lock.tryLock();
       
		//加锁失败
        if (!isLock) {
            return Result.fail("不允许重复下单");
        }
        try {
            //获取代理对象(事务)
            IVoucherOrderService proxy = (IVoucherOrderService) AopContext.currentProxy();
            return proxy.createVoucherOrder(voucherId);
        } finally {
            //释放锁
            lock.unlock();
        }
 }

相关推荐

  1. Redission快速入门

    2024-03-30 10:38:05       42 阅读
  2. Redission入门入门

    2024-03-30 10:38:05       59 阅读
  3. Flask 快速入门

    2024-03-30 10:38:05       61 阅读
  4. Spring Boot 快速入门

    2024-03-30 10:38:05       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 10:38:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 10:38:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 10:38:05       87 阅读
  4. Python语言-面向对象

    2024-03-30 10:38:05       96 阅读

热门阅读

  1. 001-从零学习设计模式-设计原则

    2024-03-30 10:38:05       38 阅读
  2. Redis的数据类型List使用场景实战

    2024-03-30 10:38:05       38 阅读
  3. 如何使用 RabbitMQ 进行消息的发送和接收

    2024-03-30 10:38:05       46 阅读
  4. 查验身份证

    2024-03-30 10:38:05       41 阅读
  5. 如何使用 WebView 将 React Native 嵌入到原生应用中

    2024-03-30 10:38:05       40 阅读
  6. HTTPS

    HTTPS

    2024-03-30 10:38:05      44 阅读
  7. 当构造器参数较多时考虑用生成器

    2024-03-30 10:38:05       40 阅读
  8. 复习拓扑排序

    2024-03-30 10:38:05       44 阅读
  9. Redis 过期删除策略

    2024-03-30 10:38:05       37 阅读
  10. Springmvc文件下载例子

    2024-03-30 10:38:05       46 阅读
  11. C#多线程编程详细教学

    2024-03-30 10:38:05       40 阅读