2013-04-23 37 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