在 php 中的会话之间共享数据(缓存)


Shared data between sessions in php (caching)

我需要将不同用户(因此不同的会话)之间的数据存储到RAM中,以加快用PHP编写的Web应用程序(数据库和文件系统不是一个选项)。

我已经在谷歌上搜索了几天,没有任何运气。我听说过memcachedapc,但我真的不知道它们是否适合我,甚至不知道如何使用它。

我还需要这个数据结构是线程安全的(没有竞争条件和数据不一致)。

用例:我有一个静态工厂函数getById($id)它返回一个类的实例。我需要这个函数来检查实例是否存在,如果存在,则返回它或以其他方式创建一个填充数据库中数据的实例。

Memcached 是和分布式缓存,缓存在 memcached 上的数据在远程服务器上,而 Memcached 提供 CAS lock(optimistic lock),你可以用它来做你的线程安全应用:

  1. $value = $memcached->get($key, NULL, $cas);
  2. 业务流程;
  3. $ret = $memcached->cas($cas, $key, $value, $exp);
  4. "
  5. cas"方法将"成功时返回TRUE,失败时返回FALSE。Memcached::getResultCode() 将返回 Memcached::RES_DATA_EXISTS 如果您尝试存储的项目自上次获取它以来已被修改。

但是,APC 是本地缓存,它通过共享内存实现,我不知道它是否线程安全

memcached 或 memcache 的问题只是 php 上的客户端模块。您还需要安装服务器应用程序并在那里连接。因此,您可以使用任何其他数据库或文件。最快的解决方案将是共享内存 http://php.net/manual/en/book.shmop.php但再次启用它"在您的配置行中使用 --enable-shmop 参数编译 PHP"因此,无需数据库和对PHP的访问,请检查fopenflock函数