PHP共有メモリキャッシュ

WBOY
リリース: 2016-06-23 13:24:28
オリジナル
1020 人が閲覧しました

PHP 共有メモリ キャッシュ

はじめに

最近 PHP を記述する場合、memcached、redis、および apc に基づいた比較的成熟したキャッシュがあることは誰もが知っています。ただし、プラグインをインストールするか、サードパーティ ソフトウェアのサポートが必要です。小規模なプロジェクトで使用するのはあまり便利ではありません。

実装

shmop_*

そこで、PHP の共有メモリの shmop_* というプレフィックスが付いた API を使用して、単純なキャッシュ インターフェイスを実装する予定です。
この関数は、キャッシュを設定および取得できる 2 つの呼び出しメソッドをサポートしています。設定時にキャッシュの有効期限も設定できます。

  function cache($key, $val=null, $expire=100) {      static $_caches = null;      static $_shm = null;      if ( null === $_shm ) $_shm = @shmop_open(ftok('mcache.solt'),              'c', 0755, config('cache.size', null, 10485760));      if ( null === $_caches && $_shm && ($size = intval(shmop_read($_shm, 0, 10))))          $_caches = $size ? @unserialize(@shmop_read($_shm, 10, $size)) : array();      if (($time = time()) && $val && $expire){          $_caches[$key] = array($time + intval($expire), $val);          if($_shm && ($size = @shmop_write($_shm, serialize(array_filter($_caches, function($  n)use($time){return $n[0] > $time;})), 10)))              @shmop_write($_shm, sprintf('%10d', $size), 0);          return $val;      }      return (isset($_caches[$key]) && $_caches[$key][0] > $time) ? $_caches[$key][1] : null;  }
ログイン後にコピー

ただし、キャッシュをロードするたびに、キャッシュをすべてまとめてロードし、デシリアライズして静的配列に保存する必要があるという欠点があります。比較的小さいデータのみをキャッシュできます。データが大きすぎるとキャッシュを更新できません。

私はこの関数と他のいくつかの基本的な関数 (現在関数は 8 つだけです) を utils リポジトリに置きます。また、composer require lloydzhou/utils を直接使用してインストールすることもできます

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート