簡體   English   中英

Php Globals訴數據庫要求大量數據

[英]Php Globals v. Database calls for lots of data

對於大型數組,是否需要在每次需要時將數據保存到全局變量或查詢數據庫更好? 在我的情況下,將它們保留在本地范圍內並傳遞給函數不是一種選擇。

我使用的是wordpress,在大多數頁面中,我都會獲得每個用戶以及所有附加到他們的元數據。 通常,我經常在同一頁面的多個位置使用這些變量。 不幸的是,wordpress不允許我在模板之間傳遞變量,因此每次使用全局變量或調用數據庫時都會遇到麻煩。 最終,這將是數百個用戶,每個用戶都附有很多元數據。 我應該每次都調用數據庫以使變量保持局部狀態,還是應該將它們保存到全局變量中以保存數據庫查詢? 有哪些注意事項? 我應該擔心性能,開銷和/或其他問題嗎?

非常感謝!

解決您問題的唯一真正方法是使用某種緩存系統( MemcacheRedis是您的最佳選擇)。 幸運的是,有許多Wordpress插件使集成變得容易。 例如:

編輯

如果您只想緩存一些數據庫調用,則可以忘記Wordpress插件並開始編寫一些代碼。 假設您只想緩存用於從數據庫中檢索用戶列表的調用,並假設您正在使用Memcache完成此任務(Memcache存儲鍵值對,並允許超快速訪問給定鍵的值)。

  1. 查詢Memcache要求鍵“ 用戶 ”。
  2. Memcache仍然沒有這樣的密鑰,因此您將遇到緩存失敗的情況,之后,您將查詢數據庫以檢索用戶列表。 現在,序列化數據庫響應( serializejson_encode是執行此操作的兩種不同方式),並將鍵“ users ”和該序列化的值一起存儲在內存緩存中。
  3. 下次您查詢Memcache詢問“用戶”時,您將獲得成功。 此時,您只需要反序列化值並使用用戶列表即可。

就這樣。 現在,您只需要確定要緩存的內容並將此過程應用於這些元素即可。

您不必執行呼叫,而是每頁執行一次,您可能必須為每個頁面執行一次調用。 因此,我建議您創建某種類以與數據庫進行交互,您可以調用該類來獲取所需的數據。 我還建議您在數據庫上使用存儲過程和函數,而不是直接查詢,因為這將有助於安全性以及應用程序邏輯和數據功能的分離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM