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();
}