ビジネス需要はこれです:オーロラサービスにプッシュ、ナンバープレートを掃引対応するユーザーのメンバーシップカードが不十分な残高がある場合は、1台のマシン、アプレットにナンバープレートの番号、プッシュメッセージを追加します。
あなたが直接バックのヒントを認めてきた場合、車両が今日入っているかどうかを判断するためにナンバープレートの番号のニーズを追加、またはストレージを追加し、実行ロジック。
質問:
プッシュロジックが最終的にプッシュして、メインロジック、ロジックに影響を与えません。アプローチを繰り返した場合、アプローチが最終的にロジックに入院されてで報告されるかどうかを再度判断された場合には、私は、完全なストレージの操作で実行しようと、オーロラプッシュを繰り返すことはできません、これは確かに受け入れられません。
ソリューション:
店で同じナンバープレートの番号と同じ日に、我々はロジックがロックされたプッシュを選んだので、あなたは、何度もプッシュすることはできません。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String currentDate = sdf.format(new Date());
if(jedisPythonUtil.setnx("getLicencePlateList:" + addRequestModel.getStoreId() + ":" + currentDate + ":" + addRequestModel.getCarNum(), "0", 86400) > 0) {
//极光推送逻辑
}
私たちは、メソッドのsetnxを見て:
private JedisPool jedisPoolPython;
/**
* set if not exists,若key已存在,则setnx不做任何操作
*
* @param key
* @param value key已存在,1:key赋值成功
* @param expire 过期时间,单位:秒
* @return
* @author jqlin
*/
public long setnx(String key, String value, int expire) {
long result = -1;
Jedis jedis = getJedis();
try {
if(null != jedis) {
result = jedis.setnx(key, value);
jedis.expire(key, expire);
}
} catch (Exception e) {
log.error("设置值失败:" + e.getMessage(), e);
} finally {
returnResource(jedis);
}
return result;
}
/**
* 同步获取Jedis实例
*
* @return Jedis
*/
public Jedis getJedis() {
if (jedisPoolPython == null) {
poolInit();
}
Jedis jedis = null;
try {
if (jedisPoolPython != null) {
jedis = jedisPoolPython.getResource();
}
} catch (Exception e) {
log.error("同步获取Jedis实例失败" + e.getMessage(), e);
returnResource(jedis);
}
return jedis;
}
/**
* 释放jedis资源
* @param jedis
*/
public static void returnResource(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
要約:
Doが自分たちのニーズを再スタートの意味を理解し、コードをコピーしません。