PHP shared memory cache

WBOY
풀어 주다: 2016-06-23 13:24:28
원래의
997명이 탐색했습니다.

PHP shared memory cache

引子

最近在写PHP的时候,需要使用内存缓存,大家都知道有比较成熟的基于memcached,redis,以及apc等缓存。但是不是要装插件就是要第三方软件支持。在小项目中用起来不是很方便!

实现

shmop_*

所以打算使用php的shared memory的shmop_*前缀的API来实现一个简单的缓存接口。
此函数支持两种调用方式,可以设置和获取缓存。设置的时候还能一并设置缓存过期时间。

  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;  }
로그인 후 복사

不过有个缺点每次load cache的时候需要全部一起load,然后反序列化保存到静态数组里面。只能缓存一些比较小的数据。如果数据过大会不能更新缓存。

我把这个函数和一些其他的基本函数(现在只有8个函数)放在一个utils仓库里面。也可以直接使用 composer require lloydzhou/utils 安装

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿