2017-05-30 117 views
4

我們需要按字母順序排列城市名單給客戶。我們應該緩存原始對象還是緩存對象?

我們應該緩存列表,因爲它是從數據庫(不排序)或高速緩存它排序列表(因爲它會被返回給客戶端)後返回?

+0

在數據庫內進行排序 - >返回 - >存儲緩存。 (除非經常更新等,用戶經常使用它) –

+0

@John,作爲答案發布一點點更多的解釋 – Rahul

回答

1

如上所述,最好在數據庫中進行排序。除此之外,假設數據庫沒有對它進行排序,是否應該對它進行排序,然後將其緩存或緩存,然後每次從緩存中檢索時對它進行排序?

您應該在將其放入緩存之前對其進行排序。將緩存看作不僅僅是存儲數據,而是存儲工作。向客戶提供城市列表的工作包括從數據庫中檢索並對其進行分類。

這是真實的過程是否涉及從數據庫或一些外部的API或者即使它需要一些長時間運行的過程,就是在應用內部檢索數據。過程可能不會產生包含該工作結果的一些對象,而只是數據。這取決於你是否應該緩存和保存多久。但總的來說,值得考慮的是,是否可以緩存整個過程的輸出而不僅僅是數據檢索。

您還可以緩存進程的某些部分。例如,假設您有一個電話會返回公司前100名產品的實時可用性。也許結果不能被緩存,或者只能被短暫緩存,因爲它應該是「實時」數據。但是也許計算出前100名產品的過程需要更長的時間,而且這一步驟可以被緩存。現在,您的實時通話只需檢查預先計算的產品清單上的可用性。

兩個例外: 如果名單真的是那麼短的差別可能是微不足道的。 另外,如果您支持多語言應用程序,那麼排序順序可能取決於用戶的語言。字母順序因字母而異。在這種情況下,您可能需要根據給定的請求文化對列表進行排序。

0

你應該總是儘可能地對服務器端進行排序。 (見Here),這樣的辛勤工作是做

然後返回排序列表。然後你需要決定是否應該緩存信息。緩存允許訪問數據更快,然後每次調用服務器/數據庫。

緩存的問題是你是而不是每次調用獲取新/新數據。因此,您需要確定此列表是否經常更新。

如果它是一個下拉列表,他們會定期填寫,然後緩存在窗體上。 如果它是一個註冊表單,它們再次使用一次,不要打擾緩存。