2013-01-24 83 views
0

我需要將不同用戶(因此不同的會話)之間的數據存儲到RAM中,以加速用PHP編寫的Web應用程序(數據庫和文件系統不是一種選項)。php中的會話之間的共享數據(緩存)

我一直在谷歌搜索幾天,沒有任何運氣。我聽說memcachedapc但我真的不知道他們是否適合我或如何使用它。

我也需要這個數據結構是線程安全的(不會有競爭條件和數據不一致)。

用例: 我有一個靜態工廠函數getById($id)它返回一個類的實例。我需要這個函數來檢查實例是否先存在,如果存在,返回它或者用數據庫創建一個新的數據。

回答

1

Memcached是和分發緩存,緩存在memcached中的數據是在遠程服務器上,並Memcached的提供CAS鎖(樂觀鎖),你可以用它讓你的線程安全的應用程序:

  1. $值= $ memcached-> get($ key,NULL,$ cas);
  2. 業務流程;
  3. $ RET = $ memcached-> CAS($ CAS,$鍵,$值,$ EXP);
  4. 的「CAS」方法「失敗則返回TRUE或FALSE的成功。memcached的:: getResultCode()將返回Memcached的:: RES_DATA_EXISTS如果自上次獲取它,你試圖存儲該項目已被修改。」

然而,APC是一個本地緩存,它通過共享內存實現,是線程安全與否我不知道

0

與memcached的內存緩存或問題,這是對PHP的唯一客戶端模塊。您還需要安裝服務器應用程序並連接到那裏。所以你可以使用任何其他數據庫或文件。最快的解決方案將共享內存http://php.net/manual/en/book.shmop.php 但再次啓用「在配置行編譯PHP使用--enable-shmop參數」 所以沒有數據庫和訪問PHP檢查的fopen羊羣功能