一,依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.19.0</version>
</dependency>
二,创建工具类
//redisson 配置类
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient redissonClient() {
Config config =new Config();
//redis地址
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
}
RedissonConfig常用方法
- 使用RedissonConfig配置创建RedissonClient对象:
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);
- 获取RBucket对象:
RBucket<String> bucket = redisson.getBucket("myBucket");
bucket.set("Hello Redis");
String value = bucket.get();
- 获取RMap对象:
RMap<String, Object> map = redisson.getMap("myMap");
map.put("key", "value");
Object value = map.get("key");
- 获取RSet对象:
RSet<String> set = redisson.getSet("mySet");
set.add("value1");
set.add("value2");
boolean contains = set.contains("value1");
- 获取RList对象:
RList<String> list = redisson.getList("myList");
list.add("value1");
list.add("value2");
String value = list.get(0);
- 获取RQueue对象:
RQueue<String> queue = redisson.getQueue("myQueue");
queue.offer("value1");
queue.offer("value2");
String value = queue.poll();
- 获取RDeque对象:
RDeque<String> deque = redisson.getDeque("myDeque");
deque.offerLast("value1");
deque.offerLast("value2");
String value = deque.pollFirst();
- 获取RLock对象:
RLock lock = redisson.getLock("myLock");
lock.lock();
try {
// 业务逻辑
} finally {
lock.unlock();
}
RLock常用方法
//对name进行加锁 线程会一直等待 直到拿到该锁
lock.lock();
//尝试对name进行加锁,线程会一直等待 直到拿到该锁 然后10秒后自动解锁
lock.lock(10L,TimeUnit.SECONDS);
//对name进行解锁,如果锁不是该线程持有则会抛出异常
lock.unlock();
//强制对name进行解锁,即此锁不论是那个线程持有都会进行解锁
lock.forceUnlock();
//尝试对name进行加锁,如果该锁被其他线程持有,会等待10秒,然后返回是否成功,如果成功 会在20秒后自动解锁
boolean b = lock.tryLock(10L, 20L, TimeUnit.SECONDS);
//尝试对name进行加锁 立即返回加锁状态 如果加锁成功会在20秒后自动解锁
boolean b1 = lock.tryLock(20L, TimeUnit.SECONDS);
//检查该锁是否被任何线程所持有
boolean locked = lock.isLocked();
//检查该锁是否当前线程持有
boolean heldByCurrentThread = lock.isHeldByCurrentThread();
//当前线程对该锁的保持次数
int holdCount = lock.getHoldCount();
//该锁的剩余时间
long l = lock.remainTimeToLive();
手动编写分布式锁思路(补充:释放锁时判断是否是本线程的锁)