8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PSR-6 Caching Interface

Last updated at Posted at 2015-08-20

PSR一覧
PSR-5 / PSR-6 / PSR-11 / PSR-12 / PSR-14 / PSR-16

2015/08/20現在、AcceptされたPSRは0,1,2,3,4,7の5種類です。
このうちPSR-4はPSR-0の置き換えなので実質4種類となります。
まあここらへんは解説記事たくさんあるのでいいでしょう。

で、現在PSR-6 Caching Interfaceというのがレビュー中です。

PSR-6はキャッシュを扱うInterfaceです。
キャッシュは現状フレームワークによって実装が全く違うので、各フレームワークに特化した書き方をしなければならず、再利用性が全くありません。

	// Zend Framweork2
	$cache  = Zend\Cache\StorageFactory::adapterFactory('apc', ['ttl' => 3600]);
	$cache->setItem('key', 'value');
	$item = $cache->getItem('key', $success);
	$cache->removeItem('key');
	
	// CakePHP 2.x
	Cache::config('short', [ 'engine' => 'Apc', 'duration' => '+1 hours' ]);
	Cache::write('key', 'value');
	$item = Cache::read('key');
	Cache::delete('key');
	
	// CodeIgniter
	$this->load->driver('cache', ['adapter' => 'apc']);
	$this->cache->save('key', 'item', 3600);
	$item = $this->cache->get('key');
	$this->cache->delete('key');
	
	// Phalcon
	$cache = new \Phalcon\Cache\Backend\Apc(
		new \Phalcon\Cache\Frontend\Data([ 'lifetime' => 3600 ]),
		[ 'prefix' => 'prefix']
	);
	$cache->save('key', 'value');
	$item = $cache->get('key');
	$cache->delete('key');

これがPSR-6対応になれば、どんなフレームワークでもだいたい同じ書き方になります。

	// PSR-6
	$cache = new CacheItemPool('apc');
	$cache->save( (new CacheItem('key'))->set('value', 3600) );
	$item = $cache->getItem('key');
	$cache->deleteItems(['key']);

PSR-6が決めているのはInterfaceだけなので、実装の中身は各FWによって違うため、CacheItemPoolやCacheItemは違う名前になる可能性があります。
しかしその中身はPsr\Cache\CacheItemInterfaceを実装しているので、同じメソッドが存在していることが保証されます。
これでキャッシュ部分の仕様については、ソースの使い回しができるようになりました。
実際問題そのまま使い回したり、もしくは何処かで言われてるように、PSRで複数のFWを混ぜて使うようになるなんてことがあるかというと、まず無いと思いますが。

そういやPsr\Cache\CacheItemInterface::__construct()が未定義だからキーの渡し方がこれで合ってる保証はないな。
なんで定義されてないんだろ?

あとまだDraftなPSRが5,8,9,10とありますが、5以外はちょっと意味がよくわかりません。

8
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?