防止MySQL中的查询缓存

Sef*_*an2 4 mysql tomcat caching connection-pooling

我通过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" />
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

数据库是MySQL数据库.

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

怎么防止这个?在这种情况下,我会看到更新列表.

编辑

query_cache_size是0和query_cache_type为ON.

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

编辑

我读到了"RESET QUERY CACHE"和"FLUSH TABLES".

他们之间有什么区别?

通过使用其中一个,拍卖/电子商务场景可能会出现问题吗?

egg*_*yal 6

一致非锁定读取中所述:

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

[ deletia ]

如果要查看数据库的"最新"状态,请使用READ COMMITTED隔离级别或锁定读取:

SELECT * FROM t LOCK IN SHARE MODE;
Run Code Online (Sandbox Code Playgroud)

您可以通过其Resource@defaultTransactionIsolation属性在Tomcat中设置默认事务隔离级别.