2013-03-31 38 views
0

我有一個約會調度應用程序,其中絕大多數約會數據是「橋下的水」。對於任何給定的日曆頁面,該頁面上約會的5%是新鮮的;其餘的都很舊,不太可能改變。在Rails/PostgreSQL應用程序中實現LRU緩存

問題是,每個頁面可以有大量的約會,並加載所有這些約會(即使加載),是緩慢的。我想做一些緩存來加快速度,但是我不想在每次創建約會時都使整個緩存失效,因爲用戶在每次約會創建後都會看到日曆頁面,所以看起來會使整個緩存無效這一點將打破緩存的全部目的。

我的理解是,我想要的是一個LRU cache。我該如何在Rails/PostgreSQL緩存中實現這​​個功能?應該在應用程序級還是數據庫級完成? LRU緩存是否正確?

+0

我會看看使用'LISTEN'和'NOTIFY'以及有效載荷來指示緩存的選擇性失效。緩存可以是Memcached,Redis或更特定的ActiveRecord/Rails。 –

回答

0

一個可能的問題是您的ORM可能會產生很多小的查詢。首先要看的是整合你的數據語句並適當地下降到SQL來獲取有趣的約會。從那裏你可以使用PostgreSQL索引使事情變得非常快。請注意,PostgreSQL允許您創建部分索引以及全部索引,這使您可以一次索引表中的部分索引。

但是,如果這不起作用,那麼一個選項是使用LISTEN和NOTIFY來使特定緩存條目無效並強制其重建。然而,你在這裏有一些重大的挑戰,所以它不是我要開始的地方。請記住,PostgreSQL本身就有一些LRU緩存功能,所以你可以更好地處理它,並且優化你的數據庫,你就不用擔心其餘的問題了。