package com.hotent.base.service;

import org.aspectj.lang.ProceedingJoinPoint;

import java.util.function.Supplier;

/**
 * 
 * @author jason
 *
 */
public interface RedisLock {
	
	/**
	 * 防止接口重复提交
	 * @param key
	 * @param joinPoint
	 * @return
	 * @throws Throwable
	 */
	Object commitRedisLock(String key, ProceedingJoinPoint joinPoint)  throws Throwable ;
	/**
	 * 执行方法加锁，不处理方法返回值。最大循环执行10次获取锁
	 * @param key 加锁关键字
	 * @param supplier 待执行的方法
	 * @return 待执行的方法的返回值，为布尔类型
	 */
	Boolean methodRedisLock(String key, Supplier<Boolean> supplier);
}
