1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kotlinでlettuceを使ってみた(その2:接続と同期接続)

Last updated at Posted at 2018-08-17

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を取得して、コマンドを発行しています。

参照 → https://lettuce.io/core/release/reference/#basic-usage

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()
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?