2014-02-21 83 views
2

什麼是在多次調用PHP腳本時保留一小段數據的好方法,這樣腳本的任何調用都可以訪問和修改它的值 - no誰調用腳本的事情?PHP跨所有用戶的全局會話存儲

我的意思是類似於$_SESSION變量,除了會話是嚴格按客戶端;一個客戶端不能訪問另一個客戶端的會話。無論誰訪問它,這個都是一樣的。

失去價值或被損壞(例如,通過兩個腳本同時競爭的條件)不是一個大問題 - 如果它正確地讀取90%的時間是令人滿意的。 OTOH,雖然我知道我可以在磁盤上使用一個簡單的文件,但我仍然更喜歡基於RAM的解決方案,不僅僅是爲了提高速度,但是這種方式不是非常耐磨的閃存,無盡的寫入會很糟糕。

+1

將這些值存儲在數據庫中有什麼問題? –

+0

你可以使用像Memcached之類的東西。 –

+0

@SamuelCook:推出整個SQL層只是爲了容納一個30個字符的字符串(大約需要存儲)?另外數據庫在磁盤上。 –

回答

1

看看共享內存的功能。存在可以被用於訪問共享存儲器兩個庫:

爲了存儲二進制數據或一個巨大字符串,共享存儲器庫是更好的,而Semahpores庫提供了便利的功能來存儲不同類型的多個變量(以一些開銷爲代價,這對於大量小型變量(布爾型變量)尤其重要,特別是對於很多小型變量(布爾型變量)。如果這太複雜了,或者您不擔心性能,那麼您可以將數據存儲在文件中(畢竟,PHP內部會話管理也使用文件...)

+0

看來Semaphores會解決我的問題。我真的不需要更重量級的像30字節的文本? –

+0

雖然這是相當低級的,所以先做一些閱讀;) –

+0

哦,如果它只有一個字符串,我寧願'shmop_ *'函數(共享內存庫的一部分)超過'shm_ *'函數的信號量提供。 –

1

一個很好的選擇使用數據庫將是memcache

+0

據此:http://we-love-php.blogspot.de/2013/02/php-caching-shm-apc-memcache-mysql-file-cache.html Memcached相當慢(比DBMS慢) –

+0

對我來說太重量級了。爲了上帝的緣故,我們正在討論存儲一個單一的小變量!爲此推出一個單獨的守護進程? –

+0

然後,你應該只使用普通的臨時文件。 PHP會話處理不會執行任何其他操作。 – freytag