はじめに

テスト目的でAzure Cache for Redisで意図的にEvictを発生させる必要があり、
色々試した結果やり方がわかったので備忘録として残します。

シンプルにAzure Cache for Redisを立ち上げたい場合は下記の記事をご参照ください。
とりあえずTerraformでAzure Redis for Cacheをつくってみる

方法

1. メモリ管理ポリシーのmaxmemory-policyallkeys-random,
maxmemory_reserved設定できる上限値に設定する。

簡単に設定する内容について説明します。

maxmemory-policyとは、Redisキャッシュがメモリ使用量の上限に達した際の挙動を設定します。
allkeys-randomの場合、上限に達した時、ランダムで削除(Evict)します。

maxmemory_reservedとは、キャッシュ以外の用途のために予約されたメモリ領域のことです。

これらを設定することで、Evictを発生させる準備が整います。

それでは、実際に設定を行う方法を書いていきます。
azure portal画面であれば、詳細設定から変更を行うことが可能です。

Terraformであれば、以下のように記述します。

resource "random_pet" "test" {
  length    = 1
  separator = ""
}

resource "random_integer" "test" {
  min = 1
  max = 100
}

resource "azurerm_redis_cache" "test" {
  name                = "test-redis-cache-${random_pet.test.id}-${random_integer.test.result}"
  location            = azurerm_resource_group.test.location
  resource_group_name = azurerm_resource_group.test.name
  capacity            = 1          # Redisキャッシュのサイズ
  family              = "C"        # 価格タイプ, C(Basic/Standard), P(Premium)
  sku_name            = "Standard" # SKU(Basic, Standard, Premium)
  enable_non_ssl_port = true       # 非TLSポートの有効化

  redis_configuration {
    maxmemory_policy   = "allkeys-random"
    maxmemory_reserved = 755
  }
}

一応、Github上にコード全体を載せるので必要であれば参考にしてみてください。
https://github.com/tkhs1121/terraform-azure-sample/tree/master/redis-evict

2. 次に大量のデータをsetしていく。

自分はmemtier_benchmarkで以下のコマンドを実行しました。

memtier_benchmark -s "$REDIS_HOST" -a "$REDIS_ACCESS_KEY" -d 1000000 --key-pattern=S:R --ratio=10:1

実行結果

Azure MonitorのメトリクスからEvictされているのが確認できます。
以上です。

最後に

誰かの参考になれば嬉しいです。