RedissonClient入门及常用方法

一,依赖

        <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常用方法

  1. 使用RedissonConfig配置创建RedissonClient对象:
Config config = new Config();
config.useSingleServer()
      .setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);
  1. 获取RBucket对象:
RBucket<String> bucket = redisson.getBucket("myBucket");
bucket.set("Hello Redis");
String value = bucket.get();
  1. 获取RMap对象:
RMap<String, Object> map = redisson.getMap("myMap");
map.put("key", "value");
Object value = map.get("key");
  1. 获取RSet对象:
RSet<String> set = redisson.getSet("mySet");
set.add("value1");
set.add("value2");
boolean contains = set.contains("value1");
  1. 获取RList对象:
RList<String> list = redisson.getList("myList");
list.add("value1");
list.add("value2");
String value = list.get(0);
  1. 获取RQueue对象:
RQueue<String> queue = redisson.getQueue("myQueue");
queue.offer("value1");
queue.offer("value2");
String value = queue.poll();
  1. 获取RDeque对象:
RDeque<String> deque = redisson.getDeque("myDeque");
deque.offerLast("value1");
deque.offerLast("value2");
String value = deque.pollFirst();
  1. 获取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();

手动编写分布式锁思路(补充:释放锁时判断是否是本线程的锁)