Amazon ElastiCacheでRedis 4.0がサポートされていたので試してみた

先日Amazon ElastiCacheが、Redis 4.0のサポートをしたことが発表されました。Redis 4.0では、さまざまなアップデートが盛り込まれており、待ち望んでいた方も多いのではないでしょうか。今回は新しく追加されたRedis 4でElastiCacheを起動してみました。
2018.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

先日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.0.10のリリースノート

今回は新しく追加された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の起動も、接続して使い始めるのも非常に簡単ですね。バージョンが上がることでパフォーマンスなども改善されています。新規はもとより、すでに導入済みの環境でも積極的にアップデートしていきたいですね。

参考サイト