一尘不染

防止MySQL中的查询缓存

tomcat

我正在通过JNDI资源使用tomcat连接池。

context.xml

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
          username="myusr" password="mypwd" driverClassName="com.mysql.jdbc.Driver"
          maxActive="1000" maxIdle="100" maxWait="10000"
          url="jdbc:mysql://localhost:3306/mydatabase" 
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" />

web.xml

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

该数据库是一个MySQL数据库。

当我选择某些信息(例如产品列表)时,在插入或删除产品后也会显示相同的列表。

如何预防呢?在这种情况下,我将看到更新后的列表。

编辑

query_cache_size是0和query_cache_type为ON。

那么,问题可能出在哪里呢?为什么会发生查询缓存?

编辑

我读到有关“ RESET QUERY CACHE”和“ FLUSH TABLES”的信息。

它们之间有什么区别?

通过使用其中之一,拍卖/电子商务方案中是否可能存在问题?


阅读 213

收藏
2020-06-16

共1个答案

一尘不染

一致的非锁定读取中所述

如果事务隔离级别REPEATABLE READ(默认级别),则同一事务中的所有一致读取将读取由该事务中的第一个此类读取建立的快照。您可以通过提交当前事务并在此之后发出新查询来获取查询的更新快照。

[ **_删除_** ]

如果要查看数据库的“最原始”状态,请使用READ COMMITTED隔离级别或锁定读取

SELECT * FROM t LOCK IN SHARE MODE;

您可以通过Resource@defaultTransactionIsolationTomcat的attribute设置默认事务隔离级别。

2020-06-16