Introduction
前回までのあらすじ。
サンプルコード
接続編
- 単純な接続
単純に接続し、クローズする例です。接続文字列については、公式ドキュメント参照。
参照 → https://lettuce.io/core/release/reference/#redisuri.uri-syntax
import io.lettuce.core.RedisClient
val redisClient = RedisClient.create("redis://localhost:6379/0")
val connection = redisClient.connect()
(処理)
connection.close()
redisClient.shutdown()
- ElastiCacheへの接続 (master-slave構成)
DNSをキャッシュさせないように、自前のClientResourceを使う例。
ただし、高アクセス環境下で使用すると、AWS側のDNSがパンクするという罠があるので、実際にはほどよくキャッシュするなどの工夫が必要だと思います。
参照 → https://github.com/lettuce-io/lettuce-core/wiki/Master-Slave
import io.lettuce.core.RedisClient
import io.lettuce.core.resource.DefaultClientResources
import io.lettuce.core.resource.DirContextDnsResolver
import java.util.Properties
val clientResources = DefaultClientResources.builder()
.dnsResolver(DirContextDnsResolver(true, false, Properties()))
.build()
val redisClient = RedisClient.create(clientResources, "redis://localhost:6379/0")
val connection = redisClient.connect()
(略)
- ElastiCache (クラスター構成)
import io.lettuce.core.RedisClient
import io.lettuce.core.RedisURI
import io.lettuce.core.codec.Utf8StringCodec
import io.lettuce.core.masterslave.MasterSlave
val redisClient = RedisClient.create()
val nodes = listOf(RedisURI.create("redis://localhost"), ...)
val connection = MasterSlave.connect(redisClient, Utf8StringCodec(), nodes)
connection.setReadFrom(ReadFrom.MASTER_PREFERRED)
(略)
同期アクセス
- 同期アクセス
connection.sync()で同期用コマンドAPIを取得して、コマンドを発行しています。
import io.lettuce.core.RedisClient
val redisClient = RedisClient.create("redis://localhost:6379/0")
val connection = redisClient.connect()
// 同期アクセスAPI
val commands = connection.sync()
// コマンド実行(同期処理)
val s1 = commands.setex(key: "foo", seconds: 1, value: "bar")
val s2 = commands.get("foo")
Thread.sleep(2000)
val s3 = commands.get("foo")
// 以下の値になっているはず
//assertEquals(s1, "OK")
//assertEquals(s2, "bar")
//assertNull(s3)
// 以下の処理は、アプリケーション終了時に行う(頻繁にcloseする必要は無い)
connection.close()
redisClient.shutdown()