【KUSANAGIのキャッシュ機構】b-cache, f-cacheについて

KUSANAGIには2つのキャッシュが存在する。

  • b-cache(ビーキャッシュ)
  • f-cache(エフキャッシュ)

それぞれどのような違いがあるのかを説明する。

f-cache

f-cacheはNginxを利用しているときに利用できる、キャッシュです。つまり、Apacheでは利用できない、Nginxの機能を利用しているものです。

FastCGIキャッシュを使用したキャッシュです。

特徴

  • PHPで生成したHTMLをメモリ上に保持させ、そこからレスポンスを返す。(故に超早い)
  • メモリ量
    具体的には、

    /etc/nginx/nginx.conf

    内にある、fastcgi_cache_pathで指定したメモリ量を超える場合は、
    指定したディレクトリ(標準では、/var/cache/nginx/wordpress)にファイルの形で保管されます。

    fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=wpcache:30m max_size=512M inactive=600m;

    /var/cache/nginx/wordpressに行ってみると、下記のような感じでファイルの生成がされていました。

    わかりにくい場合は、rootユーザーで一度f-cacheをクリアしてからアクセスしてファイルの生成をさせてみてください。(コマンドは kusanagi fcache clear)

    [root@xxx.xxx.xxx.xxx wordpress]# ll
    合計 0
    drwx------ 3 httpd www 15 12月 15 19:43 2
    drwx------ 3 httpd www 15 12月 15 19:43 a
    drwx------ 3 httpd www 15 12月 15 19:43 e
    [root@xxx.xxx.xxx.xxx wordpress]# cd 2/
    [root@xxx.xxx.xxx.xxx 2]# ll
    合計 0
    drwx------ 2 httpd www 45 12月 15 19:43 76
    [root@xxx.xxx.xxx.xxx 2]# cd 76/
    [root@xxx.xxx.xxx.xxx 76]# ll
    合計 40
    -rw------- 1 httpd www 39755 12月 15 19:43 04e619b141c2c3942a12e5e412013762

b-cache

b-cacheは、KUSANAGIのプラグインで実現しているページキャッシュのことをいいます。よくある、WP Super Cacheなどのプラグインに近いものです。
有効化は、WordPressのwp-config.phpにある、

define('WP_CACHE', true);

となっていれば利用できます。(OFFの場合は、コメントアウトになるよう)

どこにキャッシュされるのか

b-cacheは、f-cacheとは異なりデータベースの特定のテーブルに格納されます。
wp_site_cacheというテーブルになります。
僕の例では、kusanagi_site_cacheというテーブルになっていますが、接頭辞をデフォルトのwpからkusanagiに変更したためこの様になっています。

MariaDB [xxxxxxxxx_db]> show columns from kusanagi_site_cache;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| hash | varchar(32) | NO | MUL | NULL | |
| content | longtext | NO | | NULL | |
| device_url | text | NO | | NULL | |
| type | varchar(20) | YES | MUL | NULL | |
| post_type | varchar(200) | NO | | NULL | |
| headers | text | NO | | NULL | |
| user_agent | text | NO | | NULL | |
| server | varchar(16) | NO | | NULL | |
| updating | tinyint(1) | NO | MUL | 0 | |
| create_time | datetime | NO | | NULL | |
| expire_time | datetime | NO | MUL | NULL | |
+-------------+--------------+------+-----+---------+-------+
11 rows in set (0.00 sec)

試しに、device_urlを見てみました。結果は抜粋ですがしっかりとキャッシュされているのがわかります。

MariaDB [xxxxxxxxx_db]> select device_url from kusanagi_site_cache;
+-------------------------------------------------------------------+
| device_url |
+-------------------------------------------------------------------+
| |https|webtomoblg.net|/2018/12/04/takanawa-gateway-station/ |
| |https|webtomoblg.net|/ |
| |https|webtomoblg.net|/page/2/ |
| |https|webtomoblg.net|/whois/ |
| smart|https|webtomoblg.net|/2017/11/29/deny_root/ |
+-------------------------------------------------------------------+

KUSANAGIは、メモリを有効活用して高速化を実現しており、
innodb_buffer_pool_sizeやquery_cache_sizeを調整しているため、オンメモリでクエリの処理が期待できるため高速化が実現できるということです。

今日は、KUSANAGIのキャッシュの話でした。

(参考)https://column.prime-strategy.co.jp/archives/column_284

タイトルとURLをコピーしました