2013-05-02 53 views
0

好的我想我在學習memcached時錯過了一點,或者我只是不知道自己在做什麼。更好地理解用戶和memcached之間的關係

基本上我將memcached(使用CodeIgniter)集成到我的應用程序中以節省加載時間。我認爲我存儲的key:value對對當前用戶是唯一的。顯然情況並非如此,因爲當另一個用戶登錄時,他們會得到第一個用戶緩存的值,包括用戶配置文件。

如果memcached key:值對在所有用戶之間共享,那麼似乎當前用戶獨有的「nothing」可以被緩存,或者我完全錯過了某些東西(我希望如此)。

任何幫助表示讚賞。

+0

一般來說,你不會緩存用戶特定的數據,只有'通用'的東西 – 2013-05-02 02:16:27

+0

這聽起來像一個令人難以置信的天真的問題,但什麼是'通用'?如果應用程序從數據庫獲取數據,那麼它將「始終」具有一定的獨特性。 – devinfd 2013-05-02 15:23:00

+0

大多數應用程序\網站是通用的,相同的數據提供給每一個,這是一個點。如果由於用戶規格而每次都必須是新的,那麼在緩存中就沒有任何指針 – 2013-05-02 20:22:59

回答

0

memcached本身沒有你的應用程序的概念,它是一個簡單的鍵值存儲。因此,從您的應用程序的上下文中,密鑰空間是「共享的」。

如果您希望能夠分別爲每個用戶緩存內容,只需爲每個用戶的所述內容創建一個唯一密鑰即可。由於您可能已經爲每個用戶擁有唯一的標識符,因此您可以基於此生成密鑰。

+0

感謝您的迴應。這是我正在考慮關閉的角度,但是現在我聽到「通常不會緩存用戶特定的數據」,這對我來說似乎很奇怪。我會繼續閱讀我能找到的所有memcached資源。 – devinfd 2013-05-02 15:26:04

+0

我強烈反對'沒有用戶特定的數據'情緒。任何時候,您的數據的獲取/計算成本都很高,並且基本上都是靜態的,因此它們非常適合與memcache集成。大多數網頁內容很少更新,但經常閱讀,所以緩存很有意義。在應用程序數據模型和數據庫之間建立一個memcache層可能更有意義。反覆讀取將會看到一個好處。如果您的訪問模式發生逆轉,即重寫且很少讀取,那麼您將無法從memcached中獲得很多。緩存很容易,知道何時過期緩存很困難。 – ping 2013-05-02 23:41:07

+0

這是很好的建議。非常感激!我將繼續緩存用戶配置文件和一些其他用戶特定項目,以防止在每次加載頁面時查詢它們。在我的應用程序中,用戶配置文件不太可能定期更新。現在我只需要找到「最好」的ttl。 – devinfd 2013-05-03 15:22:49

相關問題