以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

PEARのCache_Liteでメモリキャッシュを実現するアレ

f:id:abyssluke:20140305061211p:plain
rita-mordio.infoで何気にPEARCache_Liteを使っているが、キャッシュの保存先にtmpfsである/dev/shm*1を指定することでメモリキャッシュを実現…って当たり前ですかね?
以下rita-mordio.infoのソースコードの一部。

<!-- 前略 -->
<?php
require_once("Cache/Lite.php");
require_once("settings.inc.php");
require_once("functions.inc.php");
$cacheOptions = array(
 'cacheDir' => '/sites/tmp/',
 'lifeTime' => 60*60*CACHE_FLUSH_HOUR,
);
if(FORCE_CACHE_FLUSH) $cacheOptions['lifeTime'] = 1;
$objCL = new Cache_Lite($cacheOptions);

if($_GET["m36"] == 1) {
 $m36 = true;
 $cacheObject = "info.rita-mordio.tumblr.rita.m36.rendered";
} else {
 $cacheObject = "info.rita-mordio.tumblr.rita.rendered";
}
if($cache = $objCL->get($cacheObject)) {
 $buf = "<!-- Cache hit! -->".$cache;
}else{
 $buf = "<!-- Last updated: ".date("r")." -->";
//後略

/sites/tmpは/dev/shmに向けるようにしてある。tmpディレクトリをtmpfsでマウントしてもいいが。

lrwxrwxrwx   1 root root     8  5月  1 15:36 2013 tmp -> /dev/shm

安全のため、/dev/shmをnoexecでマウントしておくといいかも。アパマギ(Apache Magica)攻撃とかは大抵そこに一時ファイル置くみたいだし。

# mount -o remount,noexec,nosuid,nodev /dev/shm
# mount
…
tmpfs on /dev/shm type tmpfs (rw,noexec,nosuid,nodev)
…
# 

(参考:noexecでマウントする at www.morihi-soc.net)

キャッシュを何に使ってるかって?tumblrから取得したデータを処理、キャッシュしてtumblr APIの負担を減らすためだよ。

*1:CentOSの場合。ディストリビューションによっては異なるかも