寄稿しました。
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 "キャッシュなんかなくても何やったって生きていけるよ!";
}




