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

时间:2013-01-24 08:26:39

标签: php caching memcached ram

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

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

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

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

2 个答案:

答案 0 :(得分: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。”
  5. 然而,APC是一个本地缓存,它通过共享内存实现,是不是线程安全我不知道

答案 1 :(得分:0)

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