後期第01回 - oddmutou/jugyo-2025kyototech GitHub Wiki

AWS Academy再招待 & EC2インスタンス作り直し

AWS Academyの仕様で、クラスの最長期間が半年になっています。 したがって、新しいクラスに招待します!

環境構築

アカウントが新しくなったので、AWS上の各種データはリセットされます。

EC2インスタンス作り直して、環境構築等を行ってください。

前期最終課題を正しく実施していた人は、手順書があるはずです。手順書通りにやれば問題ない、はずです。

Redis

今回は,Redisというものを使ってみましょう。

Redisとは、KVSのひとつです。


KVS(Key-Valueストア)とは - IT用語辞典 e-Words

KVSとは、データ管理システムの種類の一つで、保存したいデータ(value:値)に対し、対応する一意の標識(key:キー)を設定し、これらをペアで格納する方式。


MySQLやPostgreSQLといったRDBMS(関係データベース)は,たくさん列を増やせる表のような内容を保存できます。一方で,KVSは,keyとvalueのセットでしか保存できません。列が2つかない表をイメージしてみてください。

また,Redisは 揮発性 のあるものとして使うことが多いです。 (不揮発性をもたせることも可能。)

Redisの導入

まずRedisサーバーをインストール&起動します。

もちろんEC2インスタンスに直接インストールすることもできますが,これまでどおりコンテナ上で立ち上げます。

そしてこれもいつもどおりDocker Composeを使って,あたらしくDockerコンテナを立ち上げます。

compose.ymlのservicesディレクティブに以下の行を追記してみてください。

  redis:
    container_name: redis
    image: redis:latest
    ports:
      - 6379:6379

全体像はこんなかんじ https://github.com/oddmutou/jugyo-2025kyototech/blob/ac0c244898dea722aa7366b94283a6b63086f93a/koki_01/compose.yml

追記できたら、Docker Composeを再起動して(docker compose up しなおして)ください。

すると、redis というコンテナが立ち上がっているはずです。 docker compose ps コマンドで確認してみましょう。

redis-cliで直接操作

redis-cliというツールでCLIで直接操作することができます。

redisコンテナ内のredis-cliを使うには

docker compose exec redis redis-cli

↑このコマンドは、 redis というコンテナ内で、 redis-cli というコマンドを実行する、という意味ですね。

ではさっそく、値の保存、取得、キーの一覧の取得、削除をやってみましょう。

redis-cliの使い方

値の保存
SET key value

127.0.0.1:6379> SET hoge huga
OK
値の取得
GET key

127.0.0.1:6379> GET hoge
"huga"
キーの一覧

キーの一覧をとることで、いまどのようなデータが保存されているか確認できます。

KEYS pattern

127.0.0.1:6379> SET hoge huga
OK
127.0.0.1:6379> SET hoge2 huga2
OK
127.0.0.1:6379> KEYS *
1) "hoge2"
2) "hoge"
キー&値の削除
DEL key
127.0.0.1:6379> SET hoge huga
OK
127.0.0.1:6379> DEL hoge
(integer) 1
終了
exit

ほかにも

http://redis.shibu.jp/commandreference/

PHPのプログラムからRedisを操作する

PHPのRedis用の拡張 phpredis を導入します。

Dockerfileに以下の3行を追記します。

RUN apk add --no-cache autoconf build-base \
    && yes '' | pecl install redis \
    && docker-php-ext-enable redis

追記後の全体像はこんなかんじ https://github.com/oddmutou/jugyo-2025kyototech/blob/6c5b6e794682accdf975b99a720e6b39e652a741/koki_01/Dockerfile

追記できたら、ビルド(docker compose build)のあと,再起動(docker compose upしなおす)してください。

ビルド&再起動できたら、PHPプログラムのなかで Redis クラスを使えるようになります。

https://github.com/phpredis/phpredis のREADMEを読んだり、自分で調べたりして、触ってみましょう。

演習1

redisを使ってアクセスカウンタを作ってみましょう。

(既存の.phpとは別のファイルにしましょう。)

動作例: http://3.80.223.224/enshu1.php

実装例: https://github.com/oddmutou/jugyo-2025kyototech/commit/150de0427a2912d3115bcb05e1e8f1731475c336

演習2

Redisで簡単な掲示板を作ってみましょう。

まずは、投稿がひとつだけしか保存されない(上書きされてしまうので古いものは消えてしまう)掲示板を作ってみましょう。

簡単なフォームを作って、POSTされてきた内容をRedisに保存すればよいです。

動作例: http://3.80.223.224/enshu2.php

実装例: https://github.com/oddmutou/jugyo-2025kyototech/commit/d2172fb97d8359eb820ad62efef5d2b0a12d6d1a

演習3

複数の投稿を保存できる掲示板を作ってみましょう。

ヒント: 複数の投稿内容を配列で持つようにして,保存時は配列をJSONに変換(エンコード)してからRedisに保存するとよいです。逆にRedisから読み込むときはJSONから変換(デコード)しましょう。

動作例: http://3.80.223.224/enshu3.php

実装例: https://github.com/oddmutou/jugyo-2025kyototech/commit/33d51e519064bf5fd3fcd5b2efac40e308fd8630