0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Redis入門:基本操作から活用事例までまとめてみた

0
Last updated at Posted at 2025-08-17

最近、Redisを学んでみたので、基本操作やよく使うデータ構造ごとのコマンドをまとめてみました。
Macでのインストールから、リスト・セット・ハッシュ操作までざっくり解説します。

Redisのインストール(Macの場合)

# Homebrewでインストール
brew install redis

# サーバー起動
redis-server

# Redis専用のターミナルに接続
redis-cli

基本操作

1.データの登録

SET <キー> <値>

2.データの取得

GET <キー> <値>

3.データの削除

DEL <キー> <値>

4.キーの存在確認

EXISTS <キー> <値>

5.キー一覧の取得

KEYS <パターン>

6.キーの有効期限を設定

EXPIRE <キー> <秒数>

7.TTL(残り有効時間)確認

TTL <キー>

8.登録と同時に有効期限を設定

SETEX <キー> <秒数> <値>

リスト型(List)の操作

Redisのリストは配列のように扱え、スタックやキューとしても利用可能です。
1.LRANGE — リストの中身を確認

LRANGE friends 0 -1

2.LPUSH — 先頭に要素を追加

LPUSH friends sally

3.LPOP — 先頭から要素を取り出す

LPOP friends

4.RPOP — 末尾から要素を取り出す

RPOP friends

セット型(Set)の操作

セットは重複を許さず、順序を持たないコレクションです。
1.SADD — セットに要素を追加

SADD hobbies "weight lifting"

2.SMEMBERS — セットの全要素を取得

SMEMBERS hobbies

3.SREM — セットから要素を削除

SREM hobbies "weight lifting"

ハッシュ型(Hash)の操作

ハッシュはキーとフィールド、値の組み合わせでデータを管理します。

  • フィールドに値をセット
HSET <キー> <フィールド> <値>
  • フィールドの値を取得
HGET <キー> <フィールド>
  • 全フィールドと値を取得
HGETALL <キー>
  • フィールドの削除
HDEL <キー> <フィールド>
  • フィールドの存在確認
HEXISTS <キー> <フィールド>

活用事例「Node.js + Expressで作るAPIにRedisキャッシュを追加して高速化

1. はじめに

  • Node.jsでAPIを作るとき、外部APIやDBに毎回アクセスすると時間がかかる
  • そこで Redisをキャッシュとして利用 することで高速化できる
  • この記事では「修正前の単純API」と「Redisキャッシュ追加後のAPI」を比較して解説

2. 修正前のコード

const express = require("express");
const axios = require("axios");
const cors = require("cors");

const app = express();
app.use(cors());

app.get("/photos", async (req, res) => {
  const albumId = req.query.albumId;
  const { data } = await axios.get(
    "https://jsonplaceholder.typicode.com/photos",
    { params: { albumId } }
  );
  res.json(data);
});

app.get("/photos/:id", async (req, res) => {
  const { data } = await axios.get(
    `https://jsonplaceholder.typicode.com/photos/${req.params.id}`
  );
  res.json(data);
});

app.listen(3000);

修正前の特徴

  • 外部APIを毎回呼び出す
  • /photos にアクセスするたびに遅くなる可能性がある
  • /photos/:id は単純にAPIを返すだけ
  • キャッシュなし

3. 修正後のコード(Redis追加)

const express = require("express");
const axios = require("axios");
const cors = require("cors");
const Redis = require("redis");

const redisClient = Redis.createClient();
redisClient.connect(); 

const DEFAULT_EXPIRATION = 3600;

const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(cors());

app.get("/photos", async (req, res) => {
  const albumId = req.query.albumId;

  try {
    const cachedPhotos = await redisClient.get("photos");

    if (cachedPhotos) {
      return res.json(JSON.parse(cachedPhotos));
    }

    const { data } = await axios.get(
      "https://jsonplaceholder.typicode.com/photos",
      { params: { albumId } }
    );

    await redisClient.setEx("photos", DEFAULT_EXPIRATION, JSON.stringify(data));

    res.json(data);
  } catch (error) {
    console.error(error);
    res.status(500).send("Server Error");
  }
});

app.get("/photos/:id", async (req, res) => {
  try {
    const { data } = await axios.get(
      `https://jsonplaceholder.typicode.com/photos/${req.params.id}`
    );
    res.json(data);
  } catch (error) {
    console.error(error);
    res.status(500).send("Server Error");
  }
});

app.listen(3000, () => {
  console.log("Server running on http://localhost:3000");
});

4. 修正後のポイント

1. Redisを使ったキャッシュ

  • redisClient.get("photos") で既存データを確認
  • 既にあれば即返す → 高速化

2.データ保存

  • setEx("photos", 3600, JSON.stringify(data)) で1時間キャッシュ

3. 外部API呼び出し回数を減らせる

  • 高頻度アクセスに最適

4. /photos/:id はキャッシュなし(単純取得のみ)

5. 修正前と修正後の違い

項目 修正前 修正後
外部APIアクセス 毎回実行 キャッシュにあればスキップ
処理速度 遅くなる可能性あり 同じデータは即返すので高速
Redis なし あり(キャッシュ)
データ永続性 なし Redisで1時間だけ保持
コード複雑度 簡単 少し増えるがパフォーマンス向上

6. まとめ

  • Redisを使うとAPIレスポンスを高速化できる
  • キャッシュを使う場合は「データの有効期限」を設定して古いデータを自動削除
  • 高頻度アクセスされるAPIやDB負荷が高い処理に最適
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?