2013-04-23 65 views
3

因此,我將由登錄用戶上傳的YouTube視頻元數據存儲在django的緩存中。元數據如下所示:如何更新存儲在django緩存中的字典?

{'user': {'channels': [{'id': 1, 'etag': '2', 'videos': [{'id': '1', 'etag': '2'},]},]} 

每個不同的用戶都有自己的元數據。現在我想更新存儲在緩存中的這些數據(例如更新一些頻道視頻)。我可以做些什麼嗎?

cache.set('user', channels[0]['videos']=[new list], 30)? 

在此先感謝。

+2

如果你只是通過'cache.get'獲得'user'的緩存,然後更新通道並通過'cache.set'設置它呢?或者,考慮將每個用戶的頻道存儲在不同的緩存鍵下。 – alecxe 2013-04-23 13:25:13

回答

3

鑑於Django的緩存框架支持各種各樣的後端,我懷疑可能直接在緩存中操作Python對象的內部,因爲它需要後端理解Python對象。你可以得到將是最接近...

value = cache.get('user') 
value['channels'][0]['videos'] = <new list> 
cache.set('user', value) 

如果您需要更新更細的粒度,你將不得不使用每個用戶,例如多個按鍵...

username = 'user' 
videos_key_name = '%s/videos' % username 
channels_key_name = '%s/channels' % username 
cache.set(videos_key_name) = whatever 
cache.set(channels_key_name) = whatever 

...儘管這將需要改變你的結構的設計。

+0

感謝您的回答。第一種方法的問題是我可能有100個用戶的相當長的字典,難道不是更新如此大的字典嗎?第二種方法存在的問題是它會阻礙應用程序的設計,例如,我會抓取我問題中呈現的樹,以檢查哪些視頻發生了更改,哪些不更新,並相應地進行更新。我認爲這種技術也是可行的,但是會花費更多的精力。我想我會放棄它。謝謝。 – tejinderss 2013-04-23 14:01:23

+0

@tejinderss關於更新開銷:取決於你多久可能會這樣做。如果它低於每秒100次,那麼你可能會過早地進行優化。嘗試一些測試,看看在緩存變得無法響應之前,您每秒可以執行多少次更新。 – Aya 2013-04-23 14:08:46