我目前正在使用CouchDB和RESTlet實現REST Web服務。所述的Restlet層是主要用於認證和通過CouchDB的服務的JSON數據的一些過濾:緩存身份驗證數據
客戶< = HTTP => [的Restlet < = HTTP =>的CouchDB]
我使用的CouchDB還存儲用戶登錄數據,因爲我不想爲此添加額外的數據庫服務器。因此,對我的服務的每個請求都會導致由RESTlet執行的兩個CouchDB請求(auth數據+「真實」請求)。爲了儘可能保持服務效率,我想減少請求的數量,在這種情況下請求登錄數據。
我現在的想法是在緩存登錄數據的RESTlet應用程序中提供一個緩存(即通過LinkedHashMap的LRU緩存),因爲HTTP緩存可能不夠。但是,例如,一旦用戶更改密碼,我如何使緩存數據無效。由於REST,應用程序可能會並行運行在多個服務器上,我不想創建一箇中央實例來緩存登錄數據。
當前,我將請求的auth數據保存在緩存中,並嘗試使用它們來驗證新請求。如果身份驗證失敗或現在有條目可用,我將向我的CouchDB存儲發送一個GET請求,以獲取實際的身份驗證數據。 因此,在最壞的情況下,已更改其數據的用戶可能仍能夠使用舊憑證登錄。我該如何處理?
或者什麼是一個好的策略來保持緩存(s)最新一般?
在此先感謝。
感謝您的回答,我正在看看EHCache。我不確定額外的開銷是否由我的使用證明是合理的。也許我會緩存每個實例的所有條目,並給他們一個額外的租約。 – 2010-04-11 09:32:09
正如您接受我的回答,是否意味着您正在切換到EHCache?只是好奇。 – mindas 2010-04-14 11:21:23