【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 変数に入れて、

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

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




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

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

ラベル

3DCG AdSense AI Amazon Echo Blender Blogger cron Cursor DNS Fire TV GCP Github Copilot Google Cloud HTTP iOS IPA iPad iPhone5 JavaScript laravel mySQL nodejs PhotoShop PHP Python Redis Scratch SSH Unity vue.js Webサーバ Windows10 WinSCP イヤーカフ型 イラスト おかし おやつ オリンピック お文具 カイワレ大根 ガチャ きのこ ギフト キャラ弁 クリスマス クレジットカード ゲーミング ゲーミングキーボード ゲーミングマウス ゲーミングマウスパッド ゲーミングモニター ゲームパッド ゴーヤー栽培 コナン サーバ サイクリング サイバーセキュリティ サイバー攻撃 サブスクリプション しりとり すイエんサー スクラッチ スマートウォッチ スライム セキュリティ ゼロトラスト ダイエット タブレット ドズル社 なわとび バーテープ パズル パンダ ぷよぷよ ふるさと納税 プログラミング プロトコル番号 マイクラ マイクロソフト マリオ マンガ メモ ランニングウォッチ ランニングゲーム ワイヤレスイヤホン 異世界 絵本 株関連 鬼滅の刃 健康診断 工作 磁石 自転車 自動化 収益化 書き初め 小学校 松屋 情報処理 情報処理安全確保支援士 辛辛魚 水泳 生成AI 折り紙 川渡し問題 銭天堂 誕生日 段ボール 知育菓子 中学受験 冬鳥 動画 動画編集 日常 認定試験 粘土 福袋 便利な雑貨 母の日 銘酒 料理

このブログを検索

ブログをよくする

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

QooQ