たいきゅんの日記

ITエンジニアの積み上げ日記

Redisに入門してみた。

今回は入門記事として、Redisの入門をアウトプットしてみます。
Redisを使った開発が最近初めてだったので、キャッチアップ記事としてまとめていきます。

Radisとは

RedisはRemote Directory Serverの略で、メモリ上でデータを管理するインメモリデータベースです。
メモリ上で動作するため高速で、システムが頻繁に読み出すデータの複製を高速に配信するキャッシュサーバーとして用いられることが多いです。NoSQL型のDBでkey-value型に分類されます。
C言語で開発されており、AWSではAmazonElasticCacheのエンジンにRedisが採用されています。
使用されているサービスとして、slackやPinterestが挙げられます。

インメモリデータベース

データを**メインメモリ上(RAM)**上の領域に格納するように設計されたDB・DBMSで、電源を切ると中身が失われてしまいます。
システムの終了・再起動時や一定時間ごとにメモリ上の内容をストレージに保存して、データの永続性を保持する機能が搭載されています。
ストレージ上に構築するDBに比べてデータの読み書きを**数桁高速に**行うことができる一方、大量のデータを保持するにはコストがかかってしまうのが特徴です。

特徴

1. データ永続化設定
インメモリデータベースのため、データはサーバーの電源を落とすと消えてしまいます。データ永続化のためRDBとAOF二種類の永続化方法があります。
RDBRedis Data Baseの略で、あるタイミングのスナップショットを残す機能です。
AOFはAppend Only Fileの略で、データが更新されるたびに更新履歴を記録していくトランザクションログ機能のことです。
両機能を同時に有効にすることが可能でこれが推奨されています。デフォルトではRDBのみ有効となっています。
AOFファイルとRDBファイルの両方が存在する場合は**AOFファイルが優先**されます。
RDBファイルはRedisの起動時に自動的に読み込まれ、前回終了時のデータが復元されます。


2. 複雑な形のデータを操作し保存できる
一般的なkey-valueデータベースとは違って複数のデータ型が用意されているため、多くのデータ型を扱うことが可能です。
(例: 文字列型・リスト型・ハッシュ型)

3. 不整合が生じない
Redisはトランザクション処理のように複数の操作を一連の流れで実行する際も、全**ての操作が正しく完了しない限り、データが最初の状態に戻る**特徴があります。よって複数の処理が**全て実行されるか、全く実行されないかが保証**されており、データの不整合が生じないです。

4. 各言語のクライアントで取得したデータを使用可能
JavaPythonPHPなどの各種言語で取得したデータが使用可能です。

5. メモリの消費が大きい
メモリ上で動くため、サーバーやPCのコスパが下がる可能性があります。

環境構築(Docker環境)

docker-compose.yml

version: '3'
services:
  redis:
    image: "redis:latest"
    ports:
      - "6379:6379"
    volumes:
      - "./data/redis:/data"
      # redisの設定ファイル
      - "./redis.conf:/etc/redis.conf"


redis.conf

# メモリの最大値を設定
maxmemory 100MB

# Redisのメモリ量がmaxmemoryに達した場合、LRCアルゴリズムに従いどれかのキーを削除
maxmemory-policy allkeys-lru

上記2ファイルを用意してもらい、docker-compose up -dでコンテナを立ち上げます。
その後コンテナに入り、redis-cliコマンドでシェルを起動させることで完了です。

まとめ

Redisの基礎と簡単な環境構築まで紹介しました。
概要は紹介できたと思うので、実際に触りながら学習を進めればRedisを使いこなせるようになるはずです。
最後まで読んで頂きありがとうございました。