我正在通过JNDI资源使用tomcat连接池。
在context.xml:
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:
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。
query_cache_size
query_cache_type
那么,问题可能出在哪里呢?为什么会发生查询缓存?
我读到有关“ RESET QUERY CACHE”和“ FLUSH TABLES”的信息。
它们之间有什么区别?
通过使用其中之一,拍卖/电子商务方案中是否可能存在问题?
如一致的非锁定读取中所述:
如果事务隔离级别为REPEATABLE READ(默认级别),则同一事务中的所有一致读取将读取由该事务中的第一个此类读取建立的快照。您可以通过提交当前事务并在此之后发出新查询来获取查询的更新快照。 [ **_删除_** ] 如果要查看数据库的“最原始”状态,请使用READ COMMITTED隔离级别或锁定读取: SELECT * FROM t LOCK IN SHARE MODE;
如果事务隔离级别为REPEATABLE READ(默认级别),则同一事务中的所有一致读取将读取由该事务中的第一个此类读取建立的快照。您可以通过提交当前事务并在此之后发出新查询来获取查询的更新快照。
REPEATABLE READ
[ **_删除_** ]
如果要查看数据库的“最原始”状态,请使用READ COMMITTED隔离级别或锁定读取:
READ COMMITTED
SELECT * FROM t LOCK IN SHARE MODE;
您可以通过Resource@defaultTransactionIsolationTomcat的attribute设置默认事务隔离级别。
Resource@defaultTransactionIsolation