java中有好几种Redis客户端,但是Redisson是最快的,所以我们主要学习他
Redisson是一个再Redis的基础上实现的java驻内存数据网格(In-Memory ata Grid),她不仅提供了一系列的分布式的java常用对象,还提供了许多分布式服务,包括Qeue,lock,AtomicLong,CountDownLatch,Publish/Subscribe,Executor service等,
Redisson相比jedis,不仅封装了redis,还封装了对更多数据结构的支持,以及锁等功能
常用功能
- 分布式锁
1. 可重入锁:以线程为单位,当一个线程获取对象锁之后,这个线程可以获取本对象上的锁,而其他的线程不可以
2. 公平uo:,欸个线程抢占锁的顺序为先后调用lock方法的顺序依次获取锁,类似于排队吃饭
3. 闭锁:基于Redisson的redisson分布式锁(CountDownLatch)Java对象RCountDownLatch采用了与java.util.concurrent.CountDownLatch相似的接口和用法
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-satarter</artifactId>
<version></version>
</dependency>
spring:
redis:
host:
password:
database:
@Autowired
private RedissonClient redissonClient;
//阻塞锁模拟
public Integer lock1(){
RLock lock = null;
try{
lock = redissonClient.getLock("Lock1");
lock.lock();
Thread.seep(2000);
}catch(Exception e){
e.printStackTrace();
}finally {
if(null != lock&&lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return 1;
}
//非阻塞
public Integer lock2(){
RLock lock = null;
try{
lock = redissonClient.getLock("lock2");
if(lock.tryLock()) {
//拿到锁的
Try.sleep(2000);
}else{
//没拿到锁的
}
} catch (Exception){
e.printStackTrace();
} finally {
if(null != lock && lock.isHeldByCurrentThread()) {
lock.unlock;
}
}
return 1;
}