2015-09-07 92 views
0

我使用Redis作爲緩存服務(Key => Value)@ AWS ElastiCache。將對象保存在緩存中的最佳做法

我要救它包含高速緩存內嵌套的對象的對象:

  • Object1 - 包含對象2的情況下

我顯然連載我的目標 - 讓我們以JSON表示爲事 - 所以我的序列化對象是這樣的:

{ 
"property1":"property1", 
"property2":"property2", 
"property2":"property3", 
"object2":{ 
     object2 
     } 
} 

我不知道會是怎樣從以下選項中的最佳實踐s:

  1. 在我的鍵下存儲整個object1作爲完整的JSON。
  2. 使用自己的鍵存儲object2,並在我的object1序列化中將object2鍵作爲引用,並在從高速緩存拉回時通過鍵將object2拉出。

我的膽子認爲選項1是最好的做法和最有效的,但我有第二個想法在鍵上存儲大的嵌套對象。

回答

3

您的方案沒有通用的最佳解決方案。這取決於你如何查詢你的數據。

如果您始終從服務或客戶端獲取根對象,實際上您將整個JSON存儲在字符串鍵中。另一方面,如果您還需要查詢關聯對象,則需要將每個整個對象圖都存儲在字符串鍵中,但是您還需要將每個關聯對象存儲在散列parentobject:[id]中,並且將該對象存儲在散列parentobject:[id]中。整個散列將存儲直接關聯,其中關鍵字將是關聯的對象標識符以及關聯的JSON序列化對象的值。

根據您想要查詢根和相關對象的方式,您需要將它們以集,有序集和/或列表或其他散列爲索引。

正如我上面所說,沒有確定的解決方案,但您需要做一個好的案例研究,並考慮如何謹慎地將數據存儲在Redis中,因爲錯誤的數據存儲設計可能會變成無窮無盡的痛苦你的項目。

想想Redis就像是一個數據索引。這就好像您將手動實施關係數據庫索引一樣。

+0

如果你採取「根」的方法,你可以通過存儲壓縮JSON值或使用更有效的協議,如msgpack –

+0

@ItamarHaber來保存RAM在我的情況下,我是「gzipping」JSON字符串 –