SQLAlchemy 的缓存问题.

2012-04-18 21:13:47 +08:00
 fanzeyi
正在写一个网站,

用户提交数据之后网站通过 SQLAlchemy 插入数据进 MySQL 中.. 同时加入一个 work 进队列

然后队列中的 worker 完成任务后直接通过 MySQLdb 把结果更新到数据库里

但是此时我可以在 MySQL 里看到数据已经处理结束了,但是网站这里看到的还是 worker 处理前的数据,需要等很久才能恢复。

查了关于 sqlalchemy 的 cache 问题,却没有得到相关答案.. 有人知道这种情况是怎么造成的么?
5447 次点击
所在节点    Python
8 条回复
binux
2012-04-18 21:21:49 +08:00
fanzeyi
2012-04-18 21:26:44 +08:00
@binux 这个不行……

我在怀疑是 MySQL 的 cache 问题……
binux
2012-04-18 21:29:35 +08:00
@fanzeyi 另外commit了吗?
fanzeyi
2012-04-18 21:31:21 +08:00
@binux 另外 commit ?
napoleonu
2012-04-18 21:40:37 +08:00
MySQL 的 Query Cache 很傻,只要表有任何写操作那么关于这个表的所有 Query Cache 全部失效,而开启 Query Cache 后没条查询都要先判断有没有 Cache 所以对于经常更新的表使用 Query Cache 有可能性能不升反降。

前台页面写数据,后台管理可以看到数据,说明成功提交了(如果是 innodb 并且autocommit=0,否则更说明数据成功写入)。
napoleonu
2012-04-18 21:51:14 +08:00
前台页面写数据,后台管理可以看到数据,说明成功提交了(如果是 innodb 并且autocommit=0,否则更说明数据成功写入)。——未提交读以外隔离级别下。

这句更正,不同隔离级别有区别。
fanzeyi
2012-04-18 22:10:34 +08:00
@binux @napoleonu 嗯 找到问题所在了...

因为我用了 SQLAlchemy 的 scoped_session 但是以为不需要 close 了…… 于是就一直使用的同一个 session .. 所以查询的时候没查到更改后的数据。

囧囧
kk71
2015-08-19 20:16:05 +08:00
@fanzeyi 今天也遇到这个问题了 焦头烂额啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/32563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX