使用Memcache限制对数据库的写入次数

2 投票
3 回答
1147 浏览
提问于 2025-04-16 13:10

我正在尝试修改一个访客留言簿的示例网页应用,目的是减少对数据库的写入次数。

我想要实现的目标是把所有的留言簿条目加载到内存缓存(memcache)中,这个我已经做到了。

不过,我希望能够直接在内存缓存中更新新的留言条目,然后每30秒把所有的更改一次性写入数据库。

有没有人能给我一个实现这个目标的例子?这对我真的很有帮助!

谢谢 :)

3 个回答

1

Memcache 是一种不太稳定的存储方式,不适合存放像留言本这样的重要数据。要记住,如果内存不足,memcache 中的数据可能会被清除。

如果你的留言本访问量很大,导致写入数据库时出现超时或竞争问题,可以尝试另一种方法,使用一个限制写入速度的任务队列,来减缓写入数据库的速度。

  1. 让用户先收集留言本的内容
  2. 通过deferred库,把每条数据传递到限制写入速度的任务队列中
  3. 然后再写入数据库

你可以通过在你的 queue.yaml 文件中设置较低的执行速度来放宽写入数据库的限制,比如这样:

queue:
- name: relaxed-write
  rate: 1/s
  bucket_size: 1

如果每秒写入一次,你可能会遇到一些偶尔的超时错误;在这种情况下,任务会被重新执行,直到成功为止。

2

你想要实现的功能叫做 写后缓存,其实要正确实现起来并没有看上去那么简单。根据我目前的了解,Python中没有现成的解决方案可以直接用于Memcached或GAE,但你可以看看 Stockpyle。它提供了一些基本的功能,适用于 写入缓存(可以查看appengine.py和memcache.py),所以它可以作为你自己解决方案的基础。

6

这就像是一个丢失数据的食谱。我很难相信一个留言本会导致这么多的写入操作,造成问题。而且,这里面的记录管理也会很麻烦,因为memcache是无法搜索的。

撰写回答