【问题标题】:Shared data between sessions in php (caching)php中会话之间的共享数据(缓存)
【发布时间】:2013-01-07 22:38:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php caching memcached ram


    【解决方案1】:

    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是本地缓存,通过共享内存实现,是否线程安全我不知道

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-29
        • 2011-12-20
        • 2011-09-28
        • 2014-07-10
        • 2018-07-03
        • 2010-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多