nablarch.integration.redisstore.lettuce.LettuceSimpleRedisClient Maven / Gradle / Ivy
The newest version!
package nablarch.integration.redisstore.lettuce;
import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;
import io.lettuce.core.codec.ByteArrayCodec;
import nablarch.core.repository.initialization.Initializable;
import nablarch.core.util.annotation.Published;
/**
* 単一の Redis インスタンスに直接接続するためのシンプルな {@link LettuceRedisClient} 実装クラス。
*
* このクラスの {@link #getType()} は、識別子 {@code "simple"} を返す。
*
*
* @author Tanaka Tomoyuki
*/
@Published(tag = "architect")
public class LettuceSimpleRedisClient extends AbstractLettuceRedisClient implements Initializable {
private RedisClient client;
private StatefulRedisConnection connection;
private RedisCommands commands;
/**
* 接続するRedisサーバーのURI。
*/
protected String uri;
/**
* コンストラクタ。
*/
public LettuceSimpleRedisClient() {
super("simple");
}
@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;
}
/**
* 接続するRedisサーバーのURIを設定する。
*
* URIの書式については、Lettuceのドキュメントを参照。
*
*
* @param uri 接続するRedisサーバーのURI
*/
public void setUri(String uri) {
this.uri = uri;
}
/**
* {@inheritDoc}
*
* このメソッドは、 {@link #createClient()} と {@link #createConnection(RedisClient)} メソッドを使って
* {@link RedisClient} と {@link StatefulRedisConnection} のインスタンスを生成している。
* これらのインスタンスの設定を任意にカスタマイズしたい場合は、このクラスを継承したサブクラスを作り、
* それぞれの {@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(uri);
}
/**
* {@link StatefulRedisConnection} のインスタンスを生成する。
* @param client {@link #createClient()} で生成された {@link RedisClient} インスタンス
* @return 生成された {@link StatefulRedisConnection}
*/
protected StatefulRedisConnection createConnection(RedisClient client) {
return client.connect(new ByteArrayCodec());
}
@Override
public void dispose() {
connection.close();
client.shutdown();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy