package com.itheima.redission;

import jodd.time.TimeUtil;
import org.redisson.api.RLock;

import java.util.concurrent.TimeUnit;

/*****
 * @Author: http://www.itheima.com
 * @Description: com.itheima.redission.DistributedLocker
 ****/
public interface DistributedLocker {

    /***
     * 获取锁：1.循环获取锁
     */
    RLock lock(String lockkey);

    /***
     * 获取锁：2.获取锁之后，设置占有的锁的时间（租赁时间）
     */
    RLock lock(String lockkey , Long lesstime);

    /***
     * 获取锁：3.获取锁之后，设置占有的锁的时间（租赁时间）
     */
    RLock lock(String lockkey , Long lesstime, TimeUnit timeUtil);

    /***
     * 获取锁：4.尝试获取锁，并且在指定时间内未获取到锁，则放弃获取，给一个租赁时间
     */
    Boolean lock(String lockkey , Long lesstime, TimeUnit timeUtil, Long timeout);


    /****
     * 释放锁
     */
    void unlock(String key);

    void unlock(RLock rLock);
}
