1. 概述

Redisson 不只是一个 Java Redis 客户端,它是一个以内存 Redis 服务器作为后端的处理 Java 对象(如 java.util.Listjava.util.Mapjava.util.Setjava.util.concurrent.locks.Lock 等)的一个框架。它也提供了一些高级服务,如 RemoteService 和 SpringCacheManager。Redisson 的目标是提供使用 Redis 的更方便和容易的方式。若你已经使用过其他 Java Redis 客户端,在迁移到 Redisson 过程中Redis命令映射 列表会很有用。

2.Redisson分布式锁的简单用法(定时清理过期订单)

前提需要已安装redis 服务。

POM.xml 增加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.10.6</version>
</dependency>

application.yml 文件设置:

spring:
  application:
    name: Redis Distribute Lock

  redis:
    host: 192.168.xx.xx
    port: 6379
    timeout: 20000
    password:

server:
  port: 8080

RedissonConfig.java

@Configuration
public class RedissonConfig {

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

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

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

    /**
     * RedissonClient,单机模式
     * @return RedissonClient
     */
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port);
        if (StringUtils.isNotEmpty(password)) {
            config.useSingleServer().setPassword(password);
        }
        return Redisson.create(config);
    }
}

RedissonLock.java

tryLock(long var1, long var3, TimeUnit var5) 接收3个参数,第一个指定最长等待时间waitTime,第二个指定最长持有锁的时间 holdTime, 第三个是单位

@Service
public class RedissonLock {

    private static final String REWARD_CARD_LOCK_KEY = "444:lock:%d";

    @Resource
    private RedissonClient redissonClient;

    @Scheduled(cron = "0/10 * * ? * *")
    public synchronized void clearOrderTask() {
        RLock lock = redissonClient.getLock(String.format(REWARD_CARD_LOCK_KEY, 2));
        try {
            //尝试加锁,最多等待3秒,上锁后10秒自动解锁
            if (lock.tryLock(3, 10, TimeUnit.SECONDS)){
                try {
                    System.out.println("获取锁成功,任务开始!" + LocalDateTime.now()+ ":" + Thread.currentThread());
                    clearOrder();
                } finally {
                    System.out.println("任务结束,释放锁!" + LocalDateTime.now()+ ":" + Thread.currentThread());
                    lock.unlock();
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private void clearOrder() throws InterruptedException {
        System.out.println("开始清理未支付订单!" + LocalDateTime.now()+ ":" + Thread.currentThread());
        Thread.sleep(500);
        System.out.println("恢复订单库存!" + LocalDateTime.now()+ ":" + Thread.currentThread());
    }
}

 

原文地址:http://www.cnblogs.com/award/p/16849243.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性