使用Memcache限制对数据库的写入次数
我正在尝试修改一个访客留言簿的示例网页应用,目的是减少对数据库的写入次数。
我想要实现的目标是把所有的留言簿条目加载到内存缓存(memcache)中,这个我已经做到了。
不过,我希望能够直接在内存缓存中更新新的留言条目,然后每30秒把所有的更改一次性写入数据库。
有没有人能给我一个实现这个目标的例子?这对我真的很有帮助!
谢谢 :)
3 个回答
1
Memcache 是一种不太稳定的存储方式,不适合存放像留言本这样的重要数据。要记住,如果内存不足,memcache 中的数据可能会被清除。
如果你的留言本访问量很大,导致写入数据库时出现超时或竞争问题,可以尝试另一种方法,使用一个限制写入速度的任务队列,来减缓写入数据库的速度。
- 让用户先收集留言本的内容
- 通过deferred库,把每条数据传递到限制写入速度的任务队列中
- 然后再写入数据库
你可以通过在你的 queue.yaml
文件中设置较低的执行速度来放宽写入数据库的限制,比如这样:
queue:
- name: relaxed-write
rate: 1/s
bucket_size: 1
如果每秒写入一次,你可能会遇到一些偶尔的超时错误;在这种情况下,任务会被重新执行,直到成功为止。
6
这就像是一个丢失数据的食谱。我很难相信一个留言本会导致这么多的写入操作,造成问题。而且,这里面的记录管理也会很麻烦,因为memcache是无法搜索的。