小编典典

为什么某些mysql连接在删除+插入后选择旧数据作为mysql数据库?

python

我的python /
wsgi网络应用程序中的会话存在问题。每个2个wsgi守护进程中的每个线程都有一个不同的持久mysqldb连接。有时,在删除旧会话并创建一个新会话之后,某些连接仍会按选择获取旧会话,这意味着它们无法验证会话并要求再次登录。

详细信息:会话存储在本地mysql数据库的InnoDB表中。在通过CAS进行身份验证之后,我删除了该用户的所有先前会话,创建了一个新会话(插入一行),提交事务,并使用cookie中的新会话ID重定向到最初请求的页面。对于每个请求,都会对照数据库中的会话检查cookie中的会话ID。

有时,重定向后在数据库中找不到新创建的会话。相反,该用户的
会话仍然存在。(我通过在每个请求开始时选择并记录所有会话来进行检查)。不知何故,我正在获得缓存的结果。我尝试使用SQL_NO_CACHE选择会话,但这没有什么区别。

为什么我得到缓存的结果?高速缓存还会在其他地方发生,如何停止或刷新高速缓存?基本上,为什么其他连接看不到新插入的数据?


阅读 217

收藏
2020-12-20

共1个答案

小编典典

MySQL默认使用隔离级别“ REPEATABLE READ”,这意味着您将看不到事务启动后所做的任何事务更改,即使这些(其他)更改已提交也是如此。

如果在这些会话中发出COMMIT或ROLLBACK,则应该看到已更改的数据(因为这将终止“进行中”的事务)。

另一个选择是将这些会话的隔离级别更改为“ READ COMMITTED”。也许还有一个选项可以更改默认级别,但是您需要查看手册。

2020-12-20