Amazon ElastiCacheでRedis 4.0がサポートされていたので試してみた
こんにちは。サービスグループの武田です。
先日Amazon ElastiCacheが、Redis 4.0のサポートをしたことが発表されました。Redis 4.0では、さまざまなアップデートが盛り込まれており、待ち望んでいた方も多いのではないでしょうか。ElastiCacheがサポートしたのは、執筆時点での4.0系最新バージョン、4.0.10
です。
- キーの廃棄ポリシーとして、時間ベースのLRU(Least Recently Used)ポリシーに加え、頻度ベースのLFU(Least Frequently Used)ポリシーをサポート
- メモリ利用率を理解するための新しいMEMORYコマンドファミリーの導入
- アクティブ(オンライン)のメモリ最適化機能の導入。デフォルトでは無効
- UNLINK、FLUSHDB、FLUSHALLなどのコマンドを使った、非同期でのメモリ解放をサポート
といったような新機能が追加されています。詳細はリリースノートを確認してください。
今回は新しく追加されたRedis 4でElastiCacheを起動してみました。
やってみた
ElastiCache起動
まずはマネジメントコンソールにアクセスしてElastiCacheを起動します。
ElastiCacheのダッシュボードです。[今すぐ始める]ボタンをクリック。
必要なパラメーターを入力していきます。エンジンバージョンの互換性に4.0.10
が指定できてますね。ノードタイプやレプリケーション数は検証目的なので控えめです。
サブネットグループなどは適当に。
セキュリティの項目もすべてデフォルトのままです。本番運用をする場合はきちんと設定する必要がありますね。
最後のメンテナンスウィンドウもデフォルトのままです。やはり本番運用する場合はきちんと設定する必要があります。[作成]ボタンをクリックすると作成が始まります。
作成中です。少し待つと作成が終わり使える状態になります。
EC2からRedisへ接続
ElastiCacheが起動できたら、接続するためにEC2インスタンスを起動し、そこから接続します。今回はせっかくなのでAmazon Linux 2のインスタンスを起動しました。開発マシンからEC2インスタンス、EC2インスタンスからRedisクラスタへ接続できるようセキュリティグループの設定には気をつけてください。
EC2インスタンスにSSH接続できたらRedisクライアントをインストールしましょう。yum
リポジトリにはないため、Amazon Linux Extras
リポジトリからインストールします。コマンドは次のようになります。
$ sudo amazon-linux-extras install redis4.0
クライアントがインストールできたらエンドポイントを指定して接続します。
$ redis-cli -h redis4.soyrvq.0001.apne1.cache.amazonaws.com redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> INFO # Server redis_version:4.0.10 redis_git_sha1:0 redis_git_dirty:0 redis_build_id:0 redis_mode:standalone os:Amazon ElastiCache arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:0.0.0 process_id:1 ...
redis_version:4.0.10
でバージョンが確認できますね。
追加されたコマンドを試してみる
まずはMEMORY
コマンド。HELP
を指定するとサブコマンドが確認できます。
redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> MEMORY HELP 1) "MEMORY DOCTOR - Outputs memory problems report" 2) "MEMORY USAGE [SAMPLES ] - Estimate memory usage of key" 3) "MEMORY STATS - Show memory usage details" 4) "MEMORY PURGE - Ask the allocator to release memory" 5) "MEMORY MALLOC-STATS - Show allocator internal stats"
MEMORY STATS
でメモリ使用状況の詳細確認。
redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> MEMORY STATS 1) "peak.allocated" 2) (integer) 3869480 3) "total.allocated" 4) (integer) 3786648 5) "startup.allocated" 6) (integer) 3662152 7) "replication.backlog" 8) (integer) 0 9) "clients.slaves" 10) (integer) 0 11) "clients.normal" 12) (integer) 100652 13) "aof.buffer" 14) (integer) 0 15) "overhead.total" 16) (integer) 3762804 17) "keys.count" 18) (integer) 0 19) "keys.bytes-per-key" 20) (integer) 0 21) "dataset.bytes" 22) (integer) 23844 23) "dataset.percentage" 24) "19.152421951293945" 25) "peak.percentage" 26) "97.859352111816406" 27) "fragmentation" 28) "1.7220009565353394"
MEMORY DOCTOR
でメモリの問題レポートを確認。
redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> MEMORY DOCTOR Hi Sam, this instance is empty or is using very little memory, my issues detector can't be used in these conditions. Please, leave for your mission on Earth and fill it with some data. The new Sam and I will be back to our programming as soon as I finished rebooting.
UNLINK
による削除。
redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> SET name takeda OK redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> GET name "takeda" redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> UNLINK name (integer) 1 redis4.soyrvq.0001.apne1.cache.amazonaws.com:6379> GET name (nil)
最後に
ElastiCacheの起動も、接続して使い始めるのも非常に簡単ですね。バージョンが上がることでパフォーマンスなども改善されています。新規はもとより、すでに導入済みの環境でも積極的にアップデートしていきたいですね。