【Laravel】illuminate/cache ファイル利用の調査

環境

  • PHP: 8.2.1
  • illuminate/cache: 9.48
  • illuminate/filesystem: 9.48

使い方

  • FileStoreFilesystem のインスタンスとデータを保存するディレクトリパスを渡す
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";

保存先の決め方

  1. キーを SHA-1 でハッシュ
  2. 先頭から 2byte * 2 をディレクトリ名
  3. ハッシュ全体をファイル名
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";

取得したいキーの有効期限が切れいていた場合

  • 返却値は null
  • 値を保存していたファイルは削除される