一个网站有多少页面wordpress全屏弹窗插件

张小明 2026/1/1 6:04:40
一个网站有多少页面,wordpress全屏弹窗插件,桂林做手机网站设计,wordpress 内容付费先明确#xff1a;两种“修改数据”的场景#xff0c;结果完全不同场景1#xff1a;同一个SqlSession内执行增删改操作#xff08;修改对应数据#xff09;场景2#xff1a;外部修改了数据库数据#xff08;同一个SqlSession期间#xff0c;其他SqlSession/应用改了数据…先明确两种“修改数据”的场景结果完全不同场景1同一个SqlSession内执行增删改操作修改对应数据场景2外部修改了数据库数据同一个SqlSession期间其他SqlSession/应用改了数据怎么解决“外部修改数据导致缓存不一致”的问题1. 缩短SqlSession的生命周期最常用2. 手动清空一级缓存3. 对关键查询禁用一级缓存不推荐除非必要4. 结合二级缓存第三方分布式缓存适合分布式系统总结MyBatis缓存的“安全性”是相对的我最开始用MyBatis一级缓存的时候也有过一模一样的顾虑——要是同一个SqlSession里我先查了数据然后别的地方改了数据库里的这条数据我再查的时候会不会拿到缓存里的旧数据假数据后来实际测试看了MyBatis的源码逻辑才发现这个担心其实分两种情况MyBatis早就做了对应的处理只是我们需要搞清楚场景差异。先明确两种“修改数据”的场景结果完全不同首先要把“修改数据”的场景拆开来这是理解的关键——是在同一个SqlSession里执行增删改操作还是外部其他SqlSession、其他应用修改了数据库数据这两种情况MyBatis的处理方式不一样安全性也不同。场景1同一个SqlSession内执行增删改操作修改对应数据这种情况完全不用担心查到假数据因为MyBatis有个核心机制在同一个SqlSession中只要执行了insert、update、delete操作不管是修改哪条数据哪怕和你要查的无关MyBatis会立刻清空当前SqlSession的一级缓存。这样后续的查询就会重新去数据库取最新数据不会用到缓存里的旧数据。我给你写个代码示例一看就明白TestpublicvoidtestCrudClearCache(){SqlSessionsqlSessionMyBatisUtil.getSqlSession();UserMapperuserMappersqlSession.getMapper(UserMapper.class);// 第一步第一次查询数据存入一级缓存Useruser1userMapper.selectById(1);System.out.println(第一次查询user1);// 比如输出User{id1, name张三, age20}// 第二步同一个SqlSession里执行更新操作修改id1的用户数据UserupdateUsernewUser();updateUser.setId(1);updateUser.setName(张三修改后);updateUser.setAge(21);userMapper.updateById(updateUser);sqlSession.commit();// 增删改必须提交事务这一步会触发一级缓存清空// 第三步再次查询id1的用户Useruser2userMapper.selectById(1);System.out.println(第二次查询user2);// 输出User{id1, name张三修改后, age21}System.out.println(两个对象是否相同(user1user2));// false说明走了数据库sqlSession.close();}运行这段代码你会发现控制台打印了两次SQL执行日志第二次查询拿到的是修改后的最新数据。原因就是updateById操作执行并提交后MyBatis清空了一级缓存所以第二次查询只能去数据库查最新的。我认为这个设计特别贴心它优先保证了数据的一致性哪怕牺牲一点缓存的性能也不会让你拿到过期的假数据。场景2外部修改了数据库数据同一个SqlSession期间其他SqlSession/应用改了数据这种情况才是真正可能出现“查到假数据”的场景也是MyBatis一级缓存的局限性所在。举个例子我打开SqlSession A查询了id1的用户数据存入A的一级缓存这时候另一个用户打开SqlSession B修改了数据库里id1的用户数据并且提交了事务我在SqlSession A里再次查询id1的用户这时候拿到的还是缓存里的旧数据因为SqlSession A的一级缓存并没有被清空——MyBatis的一级缓存是本地的它感知不到外部数据库的变化。这种情况是不是就“不安全”了其实也不能完全这么说我们得结合实际的业务场景来看在我看来SqlSession的生命周期通常是“一个请求对应一个SqlSession”比如Spring整合MyBatis时默认SqlSession是和请求绑定的请求结束就关闭。这种情况下SqlSession的存活时间很短外部修改数据恰好发生在同一个SqlSession期间的概率其实不高。但如果你的SqlSession存活时间很长比如手动创建的SqlSession一直不关闭那这种数据不一致的问题就会很明显。怎么解决“外部修改数据导致缓存不一致”的问题既然存在这种潜在的风险我们在实际开发中就需要有应对的办法。我们的经验是主要有这几种思路1. 缩短SqlSession的生命周期最常用这是最简单也最有效的办法。比如在Spring项目中我们会让SqlSession和Spring的事务管理器绑定或者让SqlSession的生命周期对应一次HTTP请求——请求进来创建SqlSession请求结束关闭SqlSession一级缓存也就跟着销毁了。这样一来缓存的存活时间极短基本不会遇到外部修改数据的情况。2. 手动清空一级缓存如果确实需要长时间持有SqlSession可以在关键查询前手动调用sqlSession.clearCache()方法清空当前SqlSession的一级缓存这样查询就会去数据库取最新数据。// 在查询前手动清空缓存sqlSession.clearCache();UseruseruserMapper.selectById(1);3. 对关键查询禁用一级缓存不推荐除非必要MyBatis其实没有直接禁用一级缓存的配置但可以通过一些“小技巧”绕开比如在查询语句后加一个随机参数但这样会失去一级缓存的优化效果不建议常用。// 不推荐通过添加随机参数绕开一级缓存Select(SELECT id, name, age FROM user WHERE id #{id} AND random #{random})UserselectByIdWithRandom(Param(id)Integerid,Param(random)Doublerandom);// 调用时传入随机数userMapper.selectByIdWithRandom(1,Math.random());4. 结合二级缓存第三方分布式缓存适合分布式系统如果是分布式项目多个应用节点之间的数据一致性问题会更突出这时候可以用MyBatis的二级缓存配合Redis、Ehcache等第三方缓存。这些分布式缓存可以配置缓存刷新策略或者在数据修改时手动通知其他节点清空缓存从而保证数据一致性。不过这种方式配置起来更复杂需要权衡成本和收益。总结MyBatis缓存的“安全性”是相对的回到最开始的问题MyBatis的缓存是不是很不安全我认为答案是在合理使用的场景下它是安全的但如果使用方式不当比如长时间持有SqlSession就可能出现数据不一致的问题。MyBatis的一级缓存设计是偏向“性能优化”的但它优先通过“增删改清空缓存”的机制保证了同一个SqlSession内的数据一致性而对于外部修改数据的情况它并没有做自动处理也没法做因为本地缓存感知不到外部变化这就需要我们在开发中通过规范SqlSession的使用、手动清空缓存等方式来规避风险。说白了任何缓存都存在“缓存一致性”的问题不只是MyBatisRedis、Memcached这些缓存中间件也一样。我们不能因为有这个潜在问题就不用缓存而是要根据业务场景选择合适的缓存策略在性能和数据一致性之间找到平衡。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

金华网站建设多少钱网站自己怎么做的

t-ruby命令行工具终极指南:如何快速构建Twitter自动化系统 【免费下载链接】t-ruby A command-line power tool for Twitter. 项目地址: https://gitcode.com/gh_mirrors/tr/t-ruby t-ruby是一款专为Twitter设计的强大命令行工具,让开发者能够通过…

张小明 2025/12/29 8:31:02 网站建设

余姚 网站建设网站建设教程学习

千亿参数大模型推理优化:从理论到实践的方法论重构 【免费下载链接】accelerate 🚀 A simple way to train and use PyTorch models with multi-GPU, TPU, mixed-precision 项目地址: https://gitcode.com/gh_mirrors/ac/accelerate 问题场景&…

张小明 2025/12/29 8:30:59 网站建设

怎样做投资与理财网站编程学校一学期多少钱

在汽车智能化浪潮中,开源项目openpilot正以其独特的技术路径重新定义驾驶辅助系统的边界。2025年将是该项目实现从传统控制逻辑向人工智能驱动决策转变的关键节点。基于对技术路线图的深度分析,本文将揭示这一开源自动驾驶系统如何通过技术重构为用户带来…

张小明 2025/12/29 8:30:57 网站建设

免费的企业网站制作滨州网站建设滨州

还在为网站内容被随意复制而烦恼吗?想要保护你的原创图片和文档版权?今天我要向你推荐一款超实用的浏览器水印神器——watermark-js-plus!这个轻量级的JavaScript库能让你快速为网页添加各种水印,从简单的文字标识到高级的盲水印保…

张小明 2025/12/29 10:13:46 网站建设

网站建设技术怎么用PS做网站广告图

企业做信息化和数字化过程中,用传统办公电脑设计人员每人一台电脑或图形工作站,配置参差不齐,新旧程度不一样,性能差异较大;设计办公过程中,部分员工,时常有临时算力不够用,同事之间…

张小明 2025/12/29 10:13:43 网站建设

阿里云服务器上如何做网站企业网站建设流程步骤

还在为Windows Defender的频繁扫描、系统资源占用和误报问题而烦恼吗?作为Windows系统中最具争议的安全组件,Defender虽然提供了基础防护,却常常成为性能瓶颈和用户体验的阻碍。本文将为你详细介绍windows-defender-remover工具,帮…

张小明 2025/12/29 10:13:41 网站建设