【GCP】Redisをインストールしてビューカウンタを作成する

2021年2月8日月曜日

GCP PHP Redis

t f B! P L

 

その10.Redisでビューカウンタを作成







インメモリKVSRedisをインストールしてWebページのビューカウンタを作ってみます。

PHPでRedisのデータを更新しようと思います。


サーバが落ちてもカウンタ値がリセットされないように永続化の対応も行ってみようと思います。



今までのGCP関連記事はこちら↓




環境情報


Debian GNU/Linux 9 (stretch)
Apache/2.4.25 (Debian)
PHP 8.0.1



↓のページを参考にしました。




無料枠サーバにRadisをインストールする



■サーバにSSH接続して、次のコマンドを実行します。

$ sudo apt update


インストール情報を更新します。




■次のコマンドでRedisをインストールします。


$ sudo apt install redis-server


途中でディスク容量使う(2MByte)けど続けるかどうかの確認があるので Y で続行します。




■Redisの設定ファイルを修正する

$ sudo vim /etc/redis/redis.conf



supervised no  となっている所を、

supervised systemd に変更します。






書き換えたら、ESC → :wq  で上書き保存終了します。




■設定変更した内容を反映します。

$ sudo systemctl restart redis


エラーが出なければインストール完了です。

サーバの起動と同時にRedisも起動する設定にしました。







Redisの動作テスト


■Redisの実行状態を確認する

$ sudo systemctl status redis

● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-02-08 17:26:50 JST; 6min ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)
  Process: 2665 ExecStopPost=/bin/run-parts --verbose /etc/redis/redis-server.post-down.d (code=exited, status=0/SUCCESS)
  Process: 2662 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 2660 ExecStop=/bin/run-parts --verbose /etc/redis/redis-server.pre-down.d (code=exited, status=0/SUCCESS)
  Process: 2724 ExecStartPost=/bin/run-parts --verbose /etc/redis/redis-server.post-up.d (code=exited, status=0/SUCCESS)
  Process: 2720 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
  Process: 2718 ExecStartPre=/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d (code=exited, status=0/SUCCESS)
 Main PID: 2723 (redis-server)
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/redis-server.service
           └─2723 /usr/bin/redis-server 127.0.0.1:6379

Feb 08 17:26:50 my-server systemd[1]: Starting Advanced key-value store...
Feb 08 17:26:50 my-server run-parts[2718]: run-parts: executing /etc/redis/redis-server.pre-up.d/00_example
Feb 08 17:26:50 my-server run-parts[2724]: run-parts: executing /etc/redis/redis-server.post-up.d/00_example
Feb 08 17:26:50 my-server systemd[1]: Started Advanced key-value store.






■コマンドラインクライアントを起動して確認コマンドを実行する

$ redis-cli

127.0.0.1:6379> ping
PONG


PONG が返ってくればOKです。




■続いてデータを作成してみる

Redisコマンドラインで下記コマンドを実行します。

127.0.0.1:6379> set test "It's working!"
OK



作成したデータを取得します。

127.0.0.1:6379> get test
"It's working!"


"It’s working!" が取得できれば成功です。

※このデータの有効期限は設定していないのでありません
有効期限を確認するときは ttl [key] でできます(秒単位)





■コマンドラインを終了する

127.0.0.1:6379> exit





■パスワードを設定する

Redisの設定ファイルを開いてパスワードを設定します。

$ sudo vim /etc/redis/redis.conf

requirepass  を修正します。
/ を押して検索文字を入力)





設定を保存して、Redisを再起動します。

$ sudo systemctl restart redis



コマンドラインを立ち上げて認証をします。

$ redis-cli
127.0.0.1:6379> auth (パスワード)
OK
127.0.0.1:6379> get test
"It's working!"
127.0.0.1:6379> exit



これでほんの少しだけセキュリティが高くなりました。^^






Redisのデータを永続化する


Redisはデフォルトの設定でも一定間隔でディスクにデータが保存されるので、ある程度は永続化されていますが、サーバが突然落ちた場合などは一定時間内のデータが消失してしまうことがあるので、なるべくそのリスクを小さくします。





■設定ファイルで AOF を yes にする

やることはAOF設定をyesにするだけです。


$ sudo vim /etc/redis/redis.conf

設定ファイルを開いて 

appendonly no  を

appendonly yes  にします。





appendfsync はデフォルトの everysec(毎秒)のままにしておきます






設定を保存して、Redisを再起動します。

$ sudo systemctl restart redis



データの消失リスクが1秒以内になりました。

ひとまずこれで永続化設定は完了です。


注意:
AOFを新規で設定した後に再起動をすると、それまでのデータが空になります。
なので、先ほどの”It’s working!”をもう一度登録しておきましょう。


一度サーバを落として再起動してみましたが、データは保存されていました。






php-redis をインストールする


次のインストールコマンドを実行します。

$ sudo apt-get install php-redis






PHPで接続を確認する


下記内容のPHPファイルをドキュメントルートに配置します。
(/var/www/html/view-count.php  にしました)

<?php
 
$redis = new Redis();
//Connecting to Redis
$redis->connect('127.0.0.1', 6379);
$redis->auth('パスワード');
 
if ($redis->ping()) {
    echo "PONG<br>";
    var_dump($redis->get("test"));
}


ブラウザのURLに作成したPHPファイルを指定します。

(外部IP)/view-count.php




Redisのデータを表示できました。^^





Webページの表示回数をカウントして表示する


まずは、redis-cli を使ってカウンターのデータを作ります。

127.0.0.1:6379> set counter 0
OK
127.0.0.1:6379> get counter
"0"


先ほどのPHPで中身を表示してみます。

var_dump($redis->get("counter"));




数をインクリメントする


カウント値を表示するコマンドを get から incr に変更します。

var_dump($redis->incr("counter"));



ページを更新します(何回か)



このままだと味気ないので表示方法を変えます。






カウント値を$count 変数に入れて、

ビューカウント=カウント値

として表示されるようにしました。




これでページの表示回数を表示できるようになりました。

使い方によっては色々出来そうな気がします。^^

このブログを検索

ブログをよくする

自己紹介

自分の写真
はじめまして。あまるちゃんです。 子供のプログラミング学習に協力できるように教え方を勉強中です。 このブログでは自分が学んだことを投稿していきます。

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

QooQ