1

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

我一直在谷歌搜索几天,没有任何运气。我听说过memcachedapc,但我真的不知道它们是否适合我或者如何使用它。

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

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

4

2 回答 2

2

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

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

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

于 2013-01-24T08:42:10.810 回答
0

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

于 2015-06-05T14:31:36.593 回答