我想在PHP中實現一個散列表(PHP中的關聯數組),它可用於應用程序範圍內,即將其存儲在應用程序上下文中,程序結束時不應該丟失它。我怎樣才能在PHP中實現這一點?在應用程序上下文中的散列表php
感謝,
我想在PHP中實現一個散列表(PHP中的關聯數組),它可用於應用程序範圍內,即將其存儲在應用程序上下文中,程序結束時不應該丟失它。我怎樣才能在PHP中實現這一點?在應用程序上下文中的散列表php
感謝,
如果您使用的是Zend的PHP版本,那很容易。
您不需要序列化數據。
只有內容可以被緩存。諸如文件句柄之類的資源不能。 要存儲true/false,請使用1,0,以便您可以區分緩存失敗與===
的結果。
商店:
zend_shm_cache_store('cache_namespace::this_cache_name',$any_variable,$expire_in_seconds);
檢索:
$any_variable = zend_shm_cache_fetch('cache_namespace::this_cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
對於長期居住的數據,你可以使用:
zend_disk_cache_store();zend_disk_cache_fetch();
對於那些沒有Zend的,上面的相應的APC版本:
商店:
apc_store('cache_name',$any_variable,$expire_in_seconds);
檢索:
$any_variable = apc_fetch('cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
從未使用過任何提及的其他方法。 如果您沒有可用的共享內存,則可以將數據序列化/反序列化到磁盤。當然,共享內存要快得多,大約Zend公司的好處是它處理併發性問題,爲您和允許命名空間:
商店:
file_put_contents('/tmp/some_filename',serialize($any_variable));
檢索:
$any_variable = unserialize(file_get_contents('/tmp/some_filename'));
編輯:爲了處理併發問題,我認爲最簡單的方法是使用鎖定。我仍然可以在這個僞代碼之間看到競爭條件的可能性,這個僞代碼存在於鎖之間並且獲得鎖,但是您明白了。
的僞代碼:
while (lock exists) {
microsleep;
}
get lock.
check we got lock.
write value.
release lock.
PHP本身沒有 '應用程序上下文'。有解決方法(即將文件存儲在文件或共享內存中),但除此之外,在PHP腳本執行結束時,沒有任何東西可以存活。 – zneak