Search on the blog

2017年9月17日日曜日

ElastiCacheを使ってみた

 Redisのマネージドサービスを試しに使ってみた。AWSではElastiCacheというサービス名で提供されている(ElastiCacheでは、Redisの他にMemcachedも使うことができる)。

Redisクラスタの作成

  • AWSコンソール> ElastiCacheダッシュボード> サブネットグループからサブネットグループを作成
    • サブネットグループはRedisクラスタを作るときに指定しないといけないので、あらかじめ作っておく
  • AWSコンソール> ElastiCacheダッシュボード> RedisからRedisクラスタを作成
    • 練習用なのでレプリカは作らない
    • Redisと同じAZにEC2を立てたいので、優先AZを指定しておく
    • EC2からアクセスできるようにSGを設定しておく(今回のサンプルではdefault SGをつける)

EC2の作成

  • Redisクラスタと同じVPC、subnet内にEC2を立てる
  • AmazonElastiCacheFullAccessポリシーをアタッチしたロールを付与しておく
  • RedisクラスタにアクセスできるようにSGを設定しておく(今回のサンプルではdefault SGをつける)

クライアントアプリ

  • Pythonから使う
  • pipでredisライブラリを入れる
    • pip install redis
  • get, set, hset, hget, hmset, hmgetとかを試してみる
  • 速度がどれくらいでるか気になったので以下のプログラムで測定してみた

import time
import redis

host = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.amazonaws.com'
port = 6379
r = redis.StrictRedis(host=host, port=port)

T = 10000

set_elapsed_times = []
for i in range(T):
    key = 'k%d' % i
    val = 'v%d' % i
    start_time = time.time()
    r.set(key, val)
    t = time.time() - start_time
    set_elapsed_times.append(t * 1e6)  # micro sec
    
get_elapsed_times = []
for i in range(T):
    key = 'k%d' % i
    val = 'v%d' % i
    start_time = time.time()
    v = r.get(key)
    t = time.time() - start_time
    get_elapsed_times.append(t * 1e6)  # micro sec


測定結果

  • get/secともに、平均で250 micro secくらい
  • setのmaxが13milli secくらいかかってるのが気になる
処理 GET [microsec] SET [microsec]
mean 259.323335 241.534066
std 138.918826232.519214
min 212.669373 206.708908
25% 234.842300 224.113464
50% 246.286392 231.504440
75% 260.114670 241.279602
max 3891.468048 13475.656509

ついでにボックスプロット(1% - 99%範囲外のデータは例外とみなして除去)も書いてみた。

0 件のコメント:

コメントを投稿