【Laravel】illuminate/cache ファイル利用の調査
環境
- PHP: 8.2.1
- illuminate/cache: 9.48
- illuminate/filesystem: 9.48
使い方
-
FileStore
にFilesystem
のインスタンスとデータを保存するディレクトリパスを渡す
use Illuminate\Cache\FileStore;
use Illuminate\Filesystem\Filesystem;
require __DIR__ . '/vendor/autoload.php';
const CACHE_DIR = __DIR__ . '/data';
$filesystem = new Filesystem();
$fileStoreCache = new FileStore($filesystem, CACHE_DIR);
$fileStoreCache->put('test_key', 'test_value', 3600);
$value = $fileStoreCache->get('test_key');
ファイルへの書き込み
キー test_key
に値 test_value
を有効期限 3600 秒で保存する
$ tree ./data
./data
└── 00
└── 94
└── 00942f4668670f34c5943cf52c7ef3139fe2b8d6
$ cat ./data/00/94/00942f4668670f34c5943cf52c7ef3139fe2b8d6
1674889538s:10:"test_value";
保存先の決め方
- キーを SHA-1 でハッシュ
- 先頭から 2byte * 2 をディレクトリ名
- ハッシュ全体をファイル名
sha1('test_key'); // 00942f4668670f34c5943cf52c7ef3139fe2b8d6
// 保存先
// <cache dir>/00/94/00942f4668670f34c5943cf52c7ef3139fe2b8d6
// illuminate/cache/FileStore.php
protected function path($key)
{
$parts = array_slice(str_split($hash = sha1($key), 2), 0, 2);
return $this->directory.'/'.implode('/', $parts).'/'.$hash;
}
ファイルに書き込まれるバイト列
1674896617s:10:"test_value";
- 有効期限のタイムスタンプ
-
serialize()
した値- https://www.php.net/manual/ja/function.serialize.php
-
serialize()
でシリアル可能な型であれば保存可能
取得したいキーの有効期限が切れいていた場合
- 返却値は
null
- 値を保存していたファイルは削除される