【问题标题】:How to update dictionary stored in django's cache?如何更新存储在 django 缓存中的字典?
【发布时间】:2013-04-16 16:56:58
【问题描述】:

所以我将登录用户上传的 youtube 视频元数据存储在 django 的缓存中。元数据如下所示:

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

每个不同的用户都有自己的元数据。现在我想更新存储在缓存中的数据(例如更新一些频道视频)。我可以这样做吗?

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

提前致谢。

【问题讨论】:

  • 如果您只是通过cache.get 获取“用户”的缓存,然后通过cache.set 更新频道并设置它怎么办?或者,考虑将每个用户的频道存储在不同的缓存键下。

标签: python django memcached youtube-api


【解决方案1】:

鉴于 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

...虽然这需要改变你的结构设计。

【讨论】:

  • 感谢您的回答。第一种方法的问题是我可能有 100 个用户的相当长的字典,更新这么大的字典不是开销吗?第二种方法的问题在于它会阻碍应用程序的设计,例如,我抓取问题中提供的树以检查哪些视频已更改,哪些未更改并相应更新。我认为这种技术也可以,但需要更多的努力。我想我会试一试。谢谢。
  • @tejinderss 关于更新开销:取决于您可能多久执行一次。如果它小于每秒 100 次,那么您可能过早地进行了优化。尝试一些测试,看看在缓存变得无响应之前您每秒可以执行多少更新。
猜你喜欢
  • 1970-01-01
  • 2017-08-26
  • 2018-06-09
  • 1970-01-01
  • 2010-09-28
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
相关资源
最近更新 更多