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