In Play !, play.api.Cache
是一個單身物件,因此可以從所有其他物件全局訪問。而且,就其性質而言,緩存是一個可變對象。像這樣的全局可變狀態通常很成問題。如何在使用Play時避免重點衝突!緩存對象?
特別是存在重大碰撞的潛在問題。兩個不同的類(否則它們彼此鬆散地耦合)可能會偶然使用相同的密鑰來存儲某個值。然後,其中一個更新將被另一個更新。
解決這個問題的一個可能的方法是創建一個新的類,它甚至可以委託給全局的Cache
,但是在鍵上添加某種「名稱空間」。即使這不難實現,如果已經有一些針對此問題的標準解決方案(最好在Play!本身實現),那將會更好。有沒有?
+1但你是否已經命名你的密鑰?我通常在有問題的域之後命名緩存密鑰+其他一些唯一標識符,如用戶標識,時間戳等。清除緩存對於我來說是一個更大的擔憂,如何通過密鑰前綴清除緩存?這將非常有用。 – virtualeyes
只是建議:我總是試圖保持緩存鍵的約定:'classname.methodname.additionalparams.moreadds'它不是一個明智的解決方案,但有一點幫助。 BTW仍然沒有時間仔細研究Ehcache'索引'/'搜索API'也許使用它們可以避免衝突。 – biesior