redisを使用してデータベース・プライマリ・キーの自己増加を生成
2516 ワード
オープンソースプロジェクトアドレス:githubオープンソースリンク
データベースが増えるなんて面倒でたまらない.特にこれからは分散処理を考えて、怠け者を盗んで、直接redisをしなければならない.
次のコード
プライマリ・キー生成ポリシー・インタフェースを定義してから、拡張が容易になります.
次に、ランダム数(Long)またはUUID(String)方式で生成される補欠選手を提供する.
主役のRedisのキャッシュキークラスが登場
よし、大功告成、また列挙を使って、非常に簡単な列挙を定義すればいいのに、前のコードにしましょう...谁かが列挙を知らないことを避けて、胜手に例を挙げて、会社のデータテーブルを明らかにしないようにして、列挙名をModel类と一致させるようにすればいい.Redisを借りてプライマリ・キーを生成するすべてのクラスの新規化を実現するには、手動でプライマリ・キーを構成する必要はありません.シーケンスなどはGGに通じています.
最後に、変更を容易にするためにspringでbeanを構成し、自動的に注入し、将来のシナリオを変更します.
データベースが増えるなんて面倒でたまらない.特にこれからは分散処理を考えて、怠け者を盗んで、直接redisをしなければならない.
次のコード
プライマリ・キー生成ポリシー・インタフェースを定義してから、拡張が容易になります.
/**
* ,
* @author LeiYong
*
*/
public interface KeyGenerate {
/**
* String
* @param em
* @return
*/
public String generateStringKey(KeyGenerateEnum em);
/**
* long
* @param em
* @return
*/
public Long generateLongKey(KeyGenerateEnum em);
}
次に、ランダム数(Long)またはUUID(String)方式で生成される補欠選手を提供する.
/**
* , UUID+
* @author LeiYong
*
*/
public class BaseKeyGenerate implements KeyGenerate{
@Override
public String generateStringKey(KeyGenerateEnum em) {
return StringUtil.getUUID()+StringUtil.getNonceStr(6);
}
@Override
public Long generateLongKey(KeyGenerateEnum em) {
return System.currentTimeMillis()*1000000+NumberUtil.random(6);
}
}
主役のRedisのキャッシュキークラスが登場
/**
* Redis
* @author LeiYong
*
*/
public class RedisKeyGenerate implements KeyGenerate{
/**
* Logger for this class
*/
private final Logger logger = LoggerFactory.getLogger(RedisKeyGenerate.class);
private final String SEQUENCE_KEY = "SEQ";
@Autowired
@Qualifier("redisClientSupport")
private RedisClientSupport redisClientSupport;
@Override
public String generateStringKey(KeyGenerateEnum em) {
Long key = generateLongKey(em);
if (key!=null) {
return key.toString();
}
// redis
return new BaseKeyGenerate().generateStringKey(em);
}
@Override
public Long generateLongKey(KeyGenerateEnum em) {
synchronized (em) {
try {
Long key = redisClientSupport.incrementHash(SEQUENCE_KEY, em.name(), 1l);
if (key != null) {
return key;
}
} catch (CacheAccessException e) {
logger.warn("generateStringKey(KeyGenerateEnum) - exception ignored", e); //$NON-NLS-1$
}
}
// redis
return new BaseKeyGenerate().generateLongKey(em);
}
}
よし、大功告成、また列挙を使って、非常に簡単な列挙を定義すればいいのに、前のコードにしましょう...谁かが列挙を知らないことを避けて、胜手に例を挙げて、会社のデータテーブルを明らかにしないようにして、列挙名をModel类と一致させるようにすればいい.Redisを借りてプライマリ・キーを生成するすべてのクラスの新規化を実現するには、手動でプライマリ・キーを構成する必要はありません.シーケンスなどはGGに通じています.
public enum KeyGenerateEnum {
ActAttend,
ActRecommendDetail,ActType,
LogLogin
}
最後に、変更を容易にするためにspringでbeanを構成し、自動的に注入し、将来のシナリオを変更します.