我喜歡在基於位置的數據高速緩存(在服務器上)系統中爲移動應用程序提供數據。即如果某用戶從一個位置請求數據(這對所有來自同一區域的用戶都是共同的),我會從數據庫中獲取值並向他們顯示。但是,如果第二個用戶在同一位置的下一個5分鐘內檢索同一頁面,那麼我不想查詢數據庫中存在的數百萬條記錄,如果它存在於文件緩存中,我可以將它們帶走。那麼現在在PHP中可用的這些東西?基於位置的高速緩存系統
回答
我不知道PHP中有這樣的事情,但用PHP創建自己的緩存引擎並不難。你需要創建一個緩存目錄,並根據你得到的請求來檢查你的緩存目錄中是否存在與該請求相對應的文件。
例如您的主要參數是lat和long。 假設你得到lat = 123和long = 234(取一些隨機值)的請求,你將檢查你的緩存文件夾是一個名爲123_234.data的文件是否存在。如果存在,則不是查詢數據庫,而是讀取文件並將內容作爲輸出發送,否則從數據庫中讀取數據,並在發送響應之前在文件緩存/ 123_234.data中寫入該響應。這樣您可以稍後再處理文件,而無需再次查詢數據庫。
挑戰:
- 時間:緩存會在某些時候或其他到期。因此,在檢查文件是否存在的同時,還需要檢查上次修改的時間戳以確保緩存未過期。如果緩存在一分鐘,十分鐘,幾小時,幾天或幾個月內過期,則這取決於您的應用程序要求。
- 在這種情況下製作智能緩存文件名稱將會具有挑戰性,因爲即使距離爲100米,lat,long組合也會有所不同。一種選擇可能是通過設置精度來選擇文件名。例如真正的經緯度組合是28.631541,76.945281的形式。您可能想要創建一個名爲28.63154_76.94528.data的緩存文件(將精度值降至10位後的5個位置)。這又取決於您是否想要緩存地球上或地理區域上的單個點,以及地理區域,然後是其半徑。
我不知道爲什麼有人投下了這個問題,我相信這是一個非常好的和聰明的問題。有我的upvote :)
真的,我很欣賞你的答案,這是有道理的。 – Stranger
如果所有你關心的是查詢......一種方法可能是一個數據庫表查詢結果存儲爲json或序列化的php對象以及任何你需要匹配位置的字段。
一個cron作業上的任何間隔時間最適合將清除過期的結果
寶貴的答案..但是,當它變得越來越大時,您對性能的看法如何? – Stranger
肯定是一個簡單的實施。真的取決於你的後端資源和你想要優化什麼 – charlietfl
當我們有更多的用戶時,DBs的性能(當它變得巨大時)會再次變得更慢,這使得巨大DB中的檢索速度也變慢了吧? – Stranger
- 1. 網絡外的高速緩存系統
- 2. 使用Android系統高速緩存
- 3. ASP.NET高速緩存的位置
- 4. MVC中的高速緩存位置
- 5. 選擇基於Java的緩存系統
- 6. 高速緩存系統的工作原理網站
- 7. 確定各種文件系統的高速緩存未命中
- 8. 高速緩存中的位掩碼
- 9. 計算高速緩存中的位數
- 10. 校驗memcache比文件系統高速緩存更快嗎?
- 11. 基於文件系統的壓縮緩存 - 這是否存在?
- 12. 複製高速緩存中的數據大於一個高速緩存行
- 13. EhCache:高速緩存體系結構
- 14. 學說高速緩存關係
- 15. 關於CPU高速緩存的困惑
- 16. 高速緩存條件不工作基於WordPress的餅乾
- 17. 系統中Session,緩存和Cookie的存儲位置
- 18. 用於REST API的URL緩存系統的最高效查找
- 19. 使用spring高速緩存的屬性高速緩存
- 20. MySQL高速緩存
- 21. 高速緩存調用在MVC中的位置
- 22. 禁用高速緩存中的緩存
- 23. 緩存系統,如分佈式緩存,但在這裏我需要列出的是在高速緩存中
- 24. 元高速緩存或Codeigniter高速緩存
- 25. 從高速緩存下載圖像Android與高速緩存
- 26. 高速緩存的模式
- 27. 基於Java的高速緩存隊列具有預定義的生存時間
- 28. 基於位置的服務中的報警系統
- 29. MariaDB基於系統內存的Innodb_buffer_pool_size
- 30. 定義緩存鍵用於高速緩存在彈簧
運行你的意思是在同一臺計算機上,或只是在相同的位置(比如在同一個IP或東西) – putvande
@putvande在服務器上。所以我可以減少負載到DB,因爲它有超過一百萬條記錄.. – Stranger
我不認爲你能夠做到這一點。 – putvande