SqlSession,openSession() 到 close() 之間有效Executor 內部維護 Map<CacheKey, Object>session.commit() 或 session.flushStatements() 清空緩存session.clearCache()session.close() 銷毀緩存對象@Test
public void testCacheLever1() {
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
// 第一次查詢 → 查數據庫 → 寫入緩存
User user = mapper.findUserById(1);
System.out.println(user);
// 修改數據但未提交 → 緩存未清空
user.setUsername("yyyy");
mapper.updateUser(user);
// session.commit(); // 若註釋這行,緩存不會清空
// 第二次查詢 → 直接讀緩存 → 返回舊數據(髒讀!)
User user2 = mapper.findUserById(1);
System.out.println(user2); // 仍顯示修改前的數據
session.close();
}
<select useCache="false"> 強制查庫,適用實時性極高的數據一級緩存無法跨 SqlSession 共享,高併發下命中率有限。若需全局共享,必須升級至二級緩存或引入 Redis 等分佈式緩存方案。