後期第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
追記できたら、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