赞
踩
1.首先需要已经集成redis的环境,如何集成redis这里不做描述。
2.引入redisson的依赖。(这里使用的是3.14.1版本)
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson</artifactId>
- <version>3.14.1</version>
- </dependency>
3.添加redisson的配置类。
- package com.salong.framework.config;
-
- 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;
-
- @Data
- @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;
-
- @Bean
- public RedissonClient getRedisSon() {
- Config config = new Config();
- String address = new StringBuilder("redis://").append(host).append(":").append(port).toString();
- config.useSingleServer().setAddress(address);
- if (null != password && !"".equals(password.trim())) {
- config.useSingleServer().setPassword(password);
- }
- return Redisson.create(config);
- }
- }
其中,我这里使用的是单机的redis,如果是其他方式(主从,哨兵,集群)的话,按照下面的进行修改配置即可。
4.redisson的常见使用。
4.1 在类中注入redisson
- @Autowired
- private RedissonClient redissonClient;
4.2 获取锁对象和使用。
- public void test(){
- //竞争的锁对象名称
- RLock lock = redissonClient.getLock("lockName");
- //tryLock可以不加参数,不会抛异常,仅尝试获取一次锁对象
- //tryLock(5,10,TimeUnit.SECONDS)意思为等待锁对象5秒钟,获取到对象10秒钟后释放锁对象,调用此方法会抛出异常
- if (lock.tryLock()){
- try {
- //处理业务逻辑代码......
- }finally {
- lock.unlock();
- }
- }
- //lock.isLocked()误区:此方法不是判断当前线程是否被锁定,而是判断该锁对象当前是否被任意线程所持有。
- // 所以不能使用if(lock.isLocked()){lock.unlock();}的写法来释放锁。
- boolean locked = lock.isLocked();
- //当前线程释放锁对象
- lock.unlock();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。