All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.integration.redisstore.lettuce.LettuceMasterReplicaRedisClient Maven / Gradle / Ivy

The newest version!
package nablarch.integration.redisstore.lettuce;

import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.sync.RedisCommands;
import io.lettuce.core.codec.ByteArrayCodec;
import io.lettuce.core.masterreplica.MasterReplica;
import io.lettuce.core.masterreplica.StatefulRedisMasterReplicaConnection;
import nablarch.core.repository.initialization.Initializable;
import nablarch.core.util.annotation.Published;

/**
 * Master/Replica 構成の Redis に接続するための {@link LettuceRedisClient} 実装。
 * 

* このクラスの {@link #getType()} は、識別子 {@code "masterReplica"} を返す。 *

* * @author Tanaka Tomoyuki */ @Published(tag = "architect") public class LettuceMasterReplicaRedisClient extends AbstractLettuceRedisClient implements Initializable { private RedisClient client; private StatefulRedisMasterReplicaConnection connection; private RedisCommands commands; /** * 接続するRedisサーバーのURI。 */ protected String uri; /** * コンストラクタ。 */ public LettuceMasterReplicaRedisClient() { super("masterReplica"); } /** * 接続するRedisサーバーのURIを設定する。 *

* URIの書式については、Lettuceのドキュメントを参照。 *

* * @param uri 接続するRedisサーバーのURI */ public void setUri(String uri) { this.uri = uri; } @Override public void set(String key, byte[] value) { commands.set(encodeKey(key), value); } @Override public void pexpire(String key, long milliseconds) { commands.pexpire(encodeKey(key), milliseconds); } @Override public void pexpireat(String key, long milliseconds) { commands.pexpireat(encodeKey(key), milliseconds); } @Override public long pttl(String key) { return commands.pttl(encodeKey(key)); } @Override public byte[] get(String key) { return commands.get(encodeKey(key)); } @Override public void del(String key) { commands.del(encodeKey(key)); } @Override public boolean exists(String key) { return commands.exists(encodeKey(key)) == 1L; } /** * {@inheritDoc} *

* このメソッドは、 {@link #createClient()} と {@link #createConnection(RedisClient)} メソッドを使って * {@link RedisClient} と {@link StatefulRedisMasterReplicaConnection} のインスタンスを生成している。
* これらのインスタンスの設定を任意にカスタマイズしたい場合は、このクラスを継承したサブクラスを作り、 * それぞれの {@code create} メソッドをオーバーライドすること。 *

*/ @Override public void initialize() { client = createClient(); connection = createConnection(client); commands = connection.sync(); } /** * {@link RedisClient} のインスタンスを生成する。 * @return 生成された {@link RedisClient} */ protected RedisClient createClient() { return RedisClient.create(); } /** * {@link StatefulRedisMasterReplicaConnection} のインスタンスを生成する。 * @param client {@link #createClient()} で生成された {@link RedisClient} インスタンス * @return 生成された {@link StatefulRedisMasterReplicaConnection} */ protected StatefulRedisMasterReplicaConnection createConnection(RedisClient client) { return MasterReplica.connect(client, new ByteArrayCodec(), RedisURI.create(uri)); } @Override public void dispose() { connection.close(); client.shutdown(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy