MeWrite Docs

Redis: OOM command not allowed when used memory > maxmemory

Redisメモリ不足エラーの解決方法

概要

Redisが設定されたメモリ上限に達し、新しいデータを書き込めない状態です。

エラーメッセージ

OOM command not allowed when used memory > 'maxmemory'.

原因

  1. メモリ制限: maxmemoryに達した
  2. evictionポリシー: noevictionが設定
  3. キーの肥大化: 有効期限なしのキーが増加
  4. 大きな値: 巨大なデータ構造

解決策

1. maxmemory-policyを設定

1
2
3
# redis.conf
maxmemory 2gb
maxmemory-policy allkeys-lru

ポリシーオプション:

  • noeviction: エラーを返す(デフォルト)
  • allkeys-lru: すべてのキーからLRUで削除
  • volatile-lru: TTL付きキーからLRUで削除
  • allkeys-random: ランダムに削除

2. メモリ使用量確認

1
2
3
4
redis-cli INFO memory

# キーの分析
redis-cli --bigkeys

3. TTLを設定

1
2
3
4
5
const redis = require('redis');
const client = redis.createClient();

// 1時間で期限切れ
await client.setEx('mykey', 3600, 'value');

4. データ構造の最適化

1
2
3
4
5
6
7
8
// 悪い例: 大きなJSON
await client.set('user:1', JSON.stringify(largeObject));

// 良い例: Hash
await client.hSet('user:1', {
  name: 'John',
  email: 'john@example.com'
});

よくある間違い

  • maxmemory-policy未設定でnoeviction
  • セッションキーにTTL未設定

Redis の他のエラー

最終更新: 2025-12-09