寄稿しました。
NoSQLのRedis等もありますが、小~中規模なものだと静的なキャッシュの方が、お客様も扱いやすいかと考えています。
もくじ
環境
- CentOS7
環境を整えよう
WEB+DB+PHPのインストール
# yum install php httpd httpd-devel php-mysql mariadb mariadb-server # systemctl restart httpd # systemctl enable httpd
文字化け防止設定をしようね
# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd character-set-server=utf8 ←追加 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
MariaDBを起動させよう。
# systemctl restart mariadb # systemctl enable mariadb
DBとDBユーザ、テーブルを作ろう。
# mysql -u root MariaDB [(none)]> CREATE DATABASE sgdb; MariaDB [(none)]> GRANT ALL PRIVILEGES ON sgdb.* TO dbmaster@localhost IDENTIFIED BY 'dbpass'; MariaDB [(none)]> use sgdb; MariaDB [(none)]> CREATE TABLE staff( -> id int auto_increment, -> name varchar(255), -> job varchar(255), -> memo varchar(1024), -> index(id) -> );
データのインサート
INSERT INTO sgdb.staff(name, job, memo) VALUES ("Yuu", "Zatuyou", "プラスプラスで頑張ってます。" ), ("Shikaru", "Manager", "設計を見直さなくて大丈夫?後から直すのは大変だよ!" ), ("Kuro", "PG", "でも疲れちゃいましたよね~、休みましょ!休みましょ!" );
レコードの確認をしようね。
MariaDB [sgdb]> SELECT * FROM staff; +----+---------+---------+--------------------------------------------------------------------------------+ | id | name | job | memo | +----+---------+---------+--------------------------------------------------------------------------------+ | 1 | Yuu | Zatuyou | プラスプラスで頑張ってます。 | | 2 | Shikaru | Manager | 設計を見直さなくて大丈夫?後から直すのは大変だよ! | | 3 | Kuro | PG | でも疲れちゃいましたよね~、休みましょ!休みましょ! | +----+---------+---------+--------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)
きちんと、レコードが入っていますね。
用事は済んだからログアウトしよう
MariaDB [sgdb]> exit Bye
バイ!
Composerの導入
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" # php composer-setup.php All settings correct for using Composer Downloading... Composer (version 1.6.5) successfully installed to: /var/www/html/composer.phar Use it: php composer.phar
# php -r "unlink('composer-setup.php');" # mv composer.phar /usr/local/bin/composer
Cache Liteを導入しよう
# useradd yuu # chown yuu:apache -R /var/www
Composerからインストールしようね
$ cd /var/www/ $ composer require pear/cache_lite ※1分程度待つ Using version ^1.8 for pear/cache_lite ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing pear/cache_lite (v1.8.2): Downloading (100%) Writing lock file Generating autoload files
状況確認しよう
$ ls -laht /var/www/ 合計 8.0K drwxrwxr-x 4 yuu yuu 54 6月 6 15:14 vendor drwxr-xr-x 5 yuu apache 89 6月 6 15:14 . -rw-rw-r-- 1 yuu yuu 2.2K 6月 6 15:14 composer.lock -rw-rw-r-- 1 yuu yuu 61 6月 6 15:13 composer.json drwxr-xr-x 2 yuu apache 62 6月 6 15:08 html drwxr-xr-x. 20 root root 278 6月 4 17:51 .. drwxr-xr-x 2 yuu apache 6 4月 21 03:11 cgi-bin
Composerのファイルがあるし、大丈夫そうだね。
キャッシュ格納ディレクトリを作ろう
# mkdir -p /var/www/Cache/tmp/ # chmod 777 /var/www/Cache/tmp/
実際にCache Liteを使ってみよう!
staff.php
$ cat /var/www/html/staff.php <?php // Cache_Lite 読み込み require_once('../vendor/pear/cache_lite/Cache/Lite.php'); // Cache_Lite キャッシュ設定 ----------------------------------- $options = array( 'cacheDir' => '/var/www/Cache/tmp/', 'lifeTime' => 60, //キャッシュ時間 'caching' => true, 'automaticCleaningFactor' => 20, 'automaticSerialization' => true, 'pearErrorMode' => 'CACHE_LITE_ERROR_DIE' ); // Cache_Lite キャッシュ設定 END ------------------------------ $Cache_Lite = new Cache_Lite($options); $cache_id = '20171216'; // DB接続関数 function getDb(){ $dsn = 'mysql:dbname=sgdb; host=localhost; charset=utf8;'; $user = 'dbmaster'; $password = 'dbpass'; $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); return $dbh; } // キャッシュが存在する場合の処理 if ($cache = $Cache_Lite->get($cache_id)) { $cache = $Cache_Lite->get($cache_id); echo "<table border=1>"; foreach($cache as $row ) { echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['job']."</td>"; echo "<td>".$row['memo']."</td>"; echo "<tr>"; } echo "</table>"; echo "キャッシュ有効"; } // キャッシュが存在しない場合 else { $db = getDb(); $sql = "SELECT id, name, job, memo FROM staff"; $stt = $db->prepare($sql); $stt->execute(); echo '<table border=1>'; while( $row = $stt->fetch(PDO::FETCH_ASSOC) ) { echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['job']."</td>"; echo "<td>".$row['memo']."</td>"; echo "<tr>"; $cache[] = $row; } $stt->closeCursor(); echo "</table>"; $Cache_Lite->save($cache, $cache_id); echo "キャッシュなんかなくても何やったって生きていけるよ!"; }