通过 .setnx( 如果能够写入redis,表示时间范围内第一次调用。则执行后面逻辑
//true,表示不重复
boolean canDelete = canOperate(10, string1, string2, string3);
// false 就退出
if (!canDelete) {
}
/**
*
* @param seconds 控制重复的时间
* @param params 业务上的唯一值
* @return
*/
public static boolean canOperate(int seconds, String... params) {
boolean can = false;
StringBuilder sbd = new StringBuilder();
for (String str : params) {
if (StringUtils.isNotEmpty(str)) {
// 多个string拼接成key
sbd.append(str);
}
}
if (StringUtils.isNotEmpty(sbd)) {
// 调用redis 返回
can = RedisUtil.setnx(sbd.toString(), CmConst.Y, seconds);
}
return can;
}
/**
*
* 功能描述:SETNX数据缓存池设置键值对 true设置成功,false设置失败
*
* @param key
* @param value
* @param seconds
* @return true/false
*/
public static boolean setnx(final String key, final String value, final int seconds) {
if (StringUtils.isEmpty(key)) {
return false;
}
return shardedClient.execute(new ShardedJedisAction<Boolean>() {
@Override
public Boolean doAction(ShardedJedis shardedJedis) {
//1值被设置 0没被设置
long ret = shardedJedis.setnx(key, value);
shardedJedis.expire(key, seconds);
return ret == 1;
}
});
}