package com.qianwen.core.redis.lock; import java.util.concurrent.TimeUnit; import com.qianwen.core.tool.function.CheckedSupplier; public interface RedisLockClient { boolean tryLock(String lockName, LockType lockType, long waitTime, long leaseTime, TimeUnit timeUnit) throws InterruptedException; void unLock(String lockName, LockType lockType); T lock(String lockName, LockType lockType, long waitTime, long leaseTime, TimeUnit timeUnit, CheckedSupplier supplier); default T lockFair(String lockName, long waitTime, long leaseTime, CheckedSupplier supplier) { return (T) lock(lockName, LockType.FAIR, waitTime, leaseTime, TimeUnit.SECONDS, supplier); } default T lockReentrant(String lockName, long waitTime, long leaseTime, CheckedSupplier supplier) { return (T) lock(lockName, LockType.REENTRANT, waitTime, leaseTime, TimeUnit.SECONDS, supplier); } }