PHPackages                             ryunosuke/simple-cache - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Caching](/categories/caching)
4. /
5. ryunosuke/simple-cache

ActiveLibrary[Caching](/categories/caching)

ryunosuke/simple-cache
======================

simple psr-16 cache

v1.2.2(1y ago)03262MITPHPPHP &gt;=8.0

Since Aug 30Pushed 1y ago1 watchersCompare

[ Source](https://github.com/arima-ryunosuke/php-simple-cache)[ Packagist](https://packagist.org/packages/ryunosuke/simple-cache)[ RSS](/packages/ryunosuke-simple-cache/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (8)Versions (15)Used By (2)

simple cache
============

[](#simple-cache)

Description
-----------

[](#description)

psr-16 を実装したシンプルなキャッシュパッケージです。 ストリームのみの実装ですが、php には強力な StreamWrapper があるので、（Wrapper があれば）実質的にあらゆる対象に書き込むことができます。

Install
-------

[](#install)

```
{
    "require": {
        "ryunosuke/simple-cache": "dev-master"
    }
}
```

Feature
-------

[](#feature)

（Wrapper があれば）あらゆる個所に出力できます。 例えば下記は S3 にキャッシュを出力します。

```
$s3client = new \Aws\S3\S3Client([
    'credentials' => [
        'key'    => 'foo',
        'secret' => 'bar',
    ],
    'region'      => 'ap-northeast-1',
    'version'     => 'latest',
]);
\Aws\S3\StreamWrapper::register($s3client);

$cache = new \ryunosuke\SimpleCache\StreamCache('s3://bucket-name/savedir');
$cache->set('cache-key', 'Hello, world');
var_dump($cache->get('cache-key', 'Hello, world')); // string(12) "Hello, world"

```

ArrayAccess を実装しています。 それ自体は特筆すべきではない実装ですが、ArrayAccess によって `??=` を利用した「あるなら取得、なかったら設定しつつ取得」が容易になります。

```
$cache = new \ryunosuke\SimpleCache\StreamCache('s3://bucket-name/savedir');
// あるなら取得、なかったら設定しつつ取得
$cache['cache-key'] ??= heavy_function();
// つまり下記と同義です
if (!$cache->has(['cache-key'])) {
    $cache->set('cache-key', heavy_function());
}

```

追加で下記のようなメソッドが生えています。

- fetch\*: 取得を試みて、無かったらクロージャの返り値を格納しつつ返します
- \*ByHash: キーの制約がないキャッシュです
- keys: キャッシュキーの一覧を取得します
- items: キャッシュキーとキャッシュアイテムの一覧を取得します
- gc: 有効期限の切れたアイテムや無効になっているアイテムを削除します

キーに特殊な拡張子を指定すると格納方法を指定できます。 組み込みで下記の拡張子が使えます。

- `php`: php のコードとして格納します。opcache が効くため高速です
- `php-serialize`: serialize で格納します。↑があるため出番はほぼありません

`php` は無名クラスやクロージャもキャッシュできます。 これらの拡張子・クラスは `itemClasses` オプションで拡張できます。

`defaultExtension` で拡張子がなかった場合のデフォルト格納方法を指定できます。

なお、 キーの `.` はディレクトリ区切りを意味し、新たにディレクトリが作成されます。 この動作を切りたい場合は `directorySupport` に明示的に false を指定してください。

License
-------

[](#license)

MIT

FAQ
---

[](#faq)

- Q. なんで車輪の再開発した？
    - A. 元々 symfony-cache を好んで使っていたんですが、少し仰々しく感じてきて、実際のところ adapter は PhpFilesAdapter しか使わないし見通し良くなるように自前実装したかったのです
- Q. いや、symfony-cache なら Redis とか APCu とか有用なのもあるよ？
    - A. 専用の adapter を書かずとも php には既に StreamWrapper という強力な抽象化レイヤーが存在します。adapter で使い分けるよりも `s3://hoge/cache` とか `redis://hoge/cache` とか書くだけでよしなに判断してくれる方が好みなのです
- Q. それにしたって自前実装しなくても…
    - A. PhpFilesAdapter の吐き出すファイル名が好みではない、というのも多分にありました。フラットかつ key から想起されるファイル名であって欲しかったのです

Release
-------

[](#release)

バージョニングは romantic versioning に準拠します（semantic versioning ではありません）。

- メジャー: 大規模な互換性破壊の際にアップします（アーキテクチャ、クラス構造の変更など）
- マイナー: 小規模な互換性破壊の際にアップします（引数の変更、タイプヒントの追加など）
- パッチ: 互換性破壊はありません（デフォルト引数の追加や、新たなクラスの追加、コードフォーマットなど）

### 1.2.2

[](#122)

- \[refactor\] fetch をリファクタ
- \[fixbug\] HashTrait がメチャクチャだったので修正
- \[feature\] withNamespace でオプションを指定できるようにする
- \[feature\] 開始時に gc する gcArgs オプションを追加

### 1.2.1

[](#121)

- \[feature\] php8.2 のエラーを修正

### 1.2.0

[](#120)

- \[\*change\] directorySeparator の廃止

### 1.1.1

[](#111)

- \[composer\] update

### 1.1.0

[](#110)

- \[change\] php&gt;=8.0
- \[change\] タイプヒントを完備
- \[\*change\] memorize を int 限定に変更

### 1.0.8

[](#108)

- \[composer\] update

### 1.0.7

[](#107)

- \[feature\] All としてすべてを継承するインターフェースを追加
- \[feature\] Hashable を実装

### 1.0.6

[](#106)

- \[feature\] ArrayAccess を実装

### 1.0.5

[](#105)

- \[feature\] ロック機構を追加
- \[fixbug\] 軽微な不具合を修正

### 1.0.4

[](#104)

- \[feature\] ChainCache/NullCache もすべての interface を完備する
- \[refactor\] fetch を trait 化
- \[refactor\] getMultiple の実装が気持ち悪かったのでリファクタ

### 1.0.3

[](#103)

- \[feature\] メモ化にサイズ上限を実装

### 1.0.2

[](#102)

- \[feature\] debugInfo を実装

### 1.0.1

[](#101)

- \[feature\] NullCache を追加
- \[refactor\] 戻り値だけでも型宣言を合わせたいので psr を拡張した CacheInterface を用意
- \[refactor\] SingleTrait の導入と ChainCache への組み込み

### 1.0.0

[](#100)

- 公開

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance41

Moderate activity, may be stable

Popularity17

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~38 days

Recently: every ~45 days

Total

14

Last Release

494d ago

PHP version history (2 changes)v1.0.0PHP &gt;=7.4

v1.1.0PHP &gt;=8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/e51e177034dd7673cfaa86a43d5236ed7a6bc94f32d05c9100b039d908cd1174?d=identicon)[arima-ryunosuke](/maintainers/arima-ryunosuke)

---

Top Contributors

[![arima-ryunosuke](https://avatars.githubusercontent.com/u/7457522?v=4)](https://github.com/arima-ryunosuke "arima-ryunosuke (49 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ryunosuke-simple-cache/health.svg)

```
[![Health](https://phpackages.com/badges/ryunosuke-simple-cache/health.svg)](https://phpackages.com/packages/ryunosuke-simple-cache)
```

###  Alternatives

[symfony/cache

Provides extended PSR-6, PSR-16 (and tags) implementations

4.2k348.9M2.5k](/packages/symfony-cache)[laminas/laminas-cache

Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output

1076.9M130](/packages/laminas-laminas-cache)[cache/adapter-common

Common classes for PSR-6 adapters

11124.4M38](/packages/cache-adapter-common)[cache/filesystem-adapter

A PSR-6 cache implementation using filesystem. This implementation supports tags

705.8M82](/packages/cache-filesystem-adapter)[cache/array-adapter

A PSR-6 cache implementation using a php array. This implementation supports tags

548.3M151](/packages/cache-array-adapter)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
