
SQL
文章平均质量分 55
纵然间
资深码农,编程十年有余,曾服务于多家互联网大厂。技术精湛,经验丰富,擅长解决复杂问题。对新技术充满热情,致力于创造卓越的产品体验
展开
-
数据事务功能已经把操作隔离了,就不需要用锁了是吗
在这个级别,事务在开始时创建一个快照,事务内看到的数据都是基于这个快照的,因此它可以防止脏读和不可重复读,但可能仍然会出现幻读问题。因此,即使在使用事务的情况下,锁仍然是必不可少的机制,以确保数据的完整性和一致性。事务的隔离级别决定了事务在并发执行时的可见性和锁的行为。在这个级别,事务是完全串行执行的,从而解决了脏读、不可重复读和幻读问题。事实上,事务的隔离性正是通过锁机制来实现的。:在这个级别,一个事务可以读到另一个未提交事务的修改,这是最低的隔离级别,可能会导致脏读、不可重复读和幻读问题。原创 2024-06-08 09:02:30 · 314 阅读 · 0 评论 -
数据库中MVCC机制是否真的有意义?
在高并发的系统中,如果读操作需要等待写操作完成,那么读操作的延迟将会显著增加,进而影响整个系统的性能。MVCC在数据库中确实具有非常重要的意义,它通过提供数据的多个版本来支持高并发读写操作,避免了读写冲突,并简化了锁管理。在MVCC中,读操作通常不需要获取锁,而写操作只需要获取写锁,这大大降低了死锁和锁竞争的可能性。对于长时间运行的事务(如备份、报表生成等),MVCC可以确保它们看到一致的数据快照,而不会因为其他事务的修改而受到影响。MVCC的实现相对复杂,需要维护数据的多个版本以及它们之间的关系。原创 2024-06-05 09:18:25 · 511 阅读 · 0 评论 -
数据库的设计,为什么那么重要
良好的数据库设计能够确保数据的完整性和准确性。通过减少冗余、优化查询和确保数据一致性,可以降低系统出现故障的可能性,从而减少修复和维护的时间和成本。良好的数据库设计可以确保数据的合规性,并降低因违反法规而面临的罚款和诉讼风险。通过实施适当的访问控制、加密、备份和恢复策略,可以确保数据的安全性、完整性和可用性。一个好的数据库设计能够确保在多个用户同时访问时系统的稳定性和性能,从而支持高效的团队协作。数据库设计的重要性体现在多个方面,这些方面直接关联到企业的运营效率、数据安全、系统性能以及未来扩展的灵活性。原创 2024-05-30 09:07:00 · 457 阅读 · 0 评论 -
redis支持json,mongodb还有存在的必要吗
Redis 和 MongoDB 是两种不同类型的数据库系统,尽管 Redis 现在支持 JSON 数据类型(通过 RedisJSON 模块),但这并不意味着 MongoDB 没有存在的必要。尽管 Redis 现在支持 JSON 并提供了高性能的内存存储解决方案,但 MongoDB 因其持久化存储、复杂查询支持和大数据处理能力等特性,仍然在许多场景中发挥着不可替代的作用。Redis 支持多种数据结构,如字符串、列表、集合、哈希表等,以及现在通过 RedisJSON 支持的 JSON 数据类型。原创 2024-05-24 08:23:12 · 393 阅读 · 0 评论 -
Redis挂了,流量把数据库也打挂了,怎么办
对Redis和数据库进行详细的故障排查,找出导致故障的根本原因,并采取措施防止类似问题再次发生。立即启动数据库的备份恢复计划,如果可能,将数据库恢复到Redis故障之前的状态。实施限流策略,限制对数据库的并发请求数量,以防止过多的请求同时打到数据库上。如果数据库支持,可以启用数据库的读写分离,将读请求和写请求分散到不同的服务器上处理,以减轻单个服务器的压力。如果Redis短时间内无法恢复,可以考虑使用其他缓存解决方案,如Memcached,来临时替代Redis,以缓解数据库的压力。原创 2024-05-24 08:19:42 · 544 阅读 · 0 评论 -
MySQL如何不用IP远程访问
其中'username'是新用户的名称,'password'是用户的密码,%表示允许从任何主机进行连接。找到bind-address项,并将其设置为0.0.0.0,这将允许MySQL服务器接受来自任何IP地址的连接请求。通过使用SSH隧道,用户可以在本地设备上建立一个与远程MySQL服务器的安全连接,实现远程访问。同时,还应在MySQL中进行适当的授权配置,只允许可信的用户和主机进行远程连接。如果服务器上使用了防火墙软件,需要确保远程访问MySQL数据库的端口在防火墙中是开放的。原创 2024-05-22 08:19:33 · 394 阅读 · 0 评论 -
数据库中候选码如何快速求解
候选码是一个或多个属性的集合,其值能够唯一地标识关系中的一个元组。候选码中的属性称为主属性,而不包含在任何候选码中的属性称为非主属性。将关系中的所有属性分为四类:L类:仅出现在函数依赖左部的属性。在求解候选码时,需要注意属性的组合和闭包的计算,以确保找到所有可能的候选码。存在一些特定的算法,如基于函数依赖集的分析算法,可以帮助快速求解候选码。这些算法通常涉及对函数依赖集的处理、属性的分类、闭包的计算和候选码的组合等步骤。如果L类和N类属性的闭包不包含所有属性,则尝试与LR类属性进行组合,并计算其闭包。原创 2024-05-15 09:06:57 · 633 阅读 · 0 评论 -
数据库工程师的工作内容是什么
数据库工程师是一个需要具备丰富技术知识和实践经验的职业,他们需要不断地学习和提升自己的能力,以适应不断变化的业务需求和技术发展。数据库工程师的工作内容涵盖了数据库管理系统的全生命周期管理,从设计、测试到部署交付,以及后续的维护、优化和故障排除等各个方面。原创 2024-05-10 09:06:49 · 498 阅读 · 0 评论 -
MySQL 索引结构解释一下
在创建索引时,需要根据实际的数据和业务需求来选择合适的索引类型和结构。同时,还需要注意索引的维护和管理,以确保索引的有效性和性能。MySQL的索引结构是用于提高数据检索效率的关键组件。原创 2024-05-10 08:48:33 · 234 阅读 · 0 评论 -
如何分析“慢查询”日志进行 SQL索引优化?
分析MySQL的慢查询日志进行SQL/索引优化是一个重要的性能调优步骤。启用慢查询日志:首先,确保MySQL的慢查询日志已启用。这可以通过设置slow_query_log参数为ON来实现。你还可以设置long_query_time来定义哪些查询被认为是“慢”的。默认值是10秒,但你可以根据需要调整它。确保将慢查询日志记录到一个文件中,以便稍后分析。收集和分析日志:使用mysqldumpslow工具来分析慢查询日志。这个工具可以帮助你快速识别最慢的查询。你可以使用不同的排序选项(如按查询时间、锁定时间等)来查原创 2024-05-08 08:29:29 · 340 阅读 · 0 评论 -
如果MySQL每次增删改查都要支付一毛钱,那么会发生什么变化?
成本剧增:对于任何使用MySQL进行大量数据操作的应用来说,成本将会急剧上升。即使是小型应用,日常的数据维护成本也可能变得非常高昂。大型应用和电商平台可能会面临数百万甚至数千万的额外费用,这将对他们的财务状况产生重大影响。 开发策略调整:开发者会更加谨慎地设计数据库操作,以避免不必要的CRUD操作,以减少成本。缓存策略将变得更加重要,以减少直接对数据库的访问次数。批量处理和异步操作可能会被更多地采用,以减少实时数据库操作的频率。 数据库设计变化:数据库设计将更加注重数据结构的优化,以减少不必要的复杂性。原创 2024-05-05 10:27:13 · 214 阅读 · 0 评论 -
优化数据库的方法,从 sql 到缓存到 cpu 到操作系统
SQL层面缓存层面CPU层面操作系统层面原创 2024-05-05 09:48:27 · 313 阅读 · 0 评论 -
什么情景下做分表,什么情景下做分库
分表主要适用于数据量过大、数据冷热不均和数据逻辑清晰的场景;而分库则适用于业务独立、跨地域部署和避免单点故障的场景。原创 2024-05-05 09:44:19 · 303 阅读 · 0 评论 -
数据库事务功能有什么用
如果事务中的任何操作失败,那么整个事务都会被回滚,从而确保数据库的状态不会因部分操作的成功而变得不一致。确保数据一致性:通过事务,可以确保数据库中的数据在各种操作下的一致性,避免了数据的不一致性和破坏性操作。事务中的所有操作要么全部执行成功,要么全部失败回滚,不允许部分成功部分失败的情况。并发控制:事务的隔离性保证了多个并发事务之间的数据互不干扰,避免了数据的混乱和冲突。数据库事务功能的意义在于确保数据库操作的一致性和完整性,保护数据的并发访问,并在系统出现故障时提供恢复能力。原创 2024-05-01 13:09:55 · 144 阅读 · 1 评论 -
数据库会用圆柱体来表示历史渊源
从历史角度来看,圆柱体在早期计算机科学和信息技术的文献中,被用来象征磁鼓存储器——一种早期的计算机存储设备。尽管存储技术已经发展,从磁鼓到磁盘再到固态驱动器,圆柱体的象征意义已经从具体的磁鼓扩展到更普遍地代表存储设备和数据仓库。在数据库管理系统中,可视化工具经常用来显示数据,而圆柱体作为数据的图形化表示,有助于用户更清晰地识别和操作数据。其形状和大小可以直接映射到数据的某些特性,例如在关系型数据库中,表的列数和行数可以对应到圆柱体的大小和高度,使得用户可以更容易地理解数据和表之间的关系。原创 2024-04-29 10:45:33 · 291 阅读 · 0 评论 -
数据量大的时候,为什么要使用 redis 而不用 mysql?
Redis在读取和写入数据方面具有显著的速度优势,尤其适用于需要频繁访问数据的场景。而MySQL在面临大量并发读写请求时,可能需要通过更复杂的锁机制和并发控制来确保数据的一致性,这可能会降低其性能。通过将热点数据存储在Redis中,可以避免频繁访问MySQL数据库,从而降低数据库的负载和响应延迟。这种缓存机制在处理大量数据时尤为有效,可以显著提高系统的性能和稳定性。在数据量大的情况下,使用Redis而不是MySQL的原因主要涉及到Redis的内存存储、高并发读写能力、丰富的数据结构以及缓存机制等多个方面。原创 2024-04-29 10:38:43 · 407 阅读 · 0 评论 -
mysql一次写操作会经历多少次磁盘io
这个过程可以减少磁盘IO的次数。当MySQL进行写操作时,它可能会首先将数据写入到内存中的缓存区,然后再根据需要将其刷新到磁盘上。MySQL的写操作所经历的磁盘IO次数是一个复杂的问题,因为它受到多种因素的影响,包括数据是否在缓存中、数据的组织形式、是否使用了索引、存储引擎的类型等。磁盘IO次数只是评估MySQL写操作性能的一个方面,还需要考虑其他因素,如写操作的延迟、吞吐量以及对系统整体性能的影响等。在实际应用中,可以通过监控和分析MySQL的性能数据来了解写操作的磁盘IO情况,并进行相应的优化。原创 2024-04-28 19:44:11 · 347 阅读 · 0 评论 -
为什么数据库会用圆柱体来表示?
在数据库中,我们可以将数据的属性和数量直接映射到圆柱体的形状和大小上。比如,在关系型数据库中,表的列数和行数可以很容易地通过圆柱体的大小和高度来展示,使得用户可以更加直观地理解数据和表之间的关系。比如,通过单击圆柱体上的某个部分,用户可以轻松地对数据进行排序或筛选。比如,早期的数据存储技术如鼓内存或水银罐内存,它们的形状和圆柱体有相似之处,这可能影响了数据库图形表示的设计。总之,数据库用圆柱体来表示是出于多种原因的综合考虑,包括直观性、可视化以及历史和技术因素的影响。为什么数据库会用圆柱体来表示?原创 2024-04-27 09:37:21 · 527 阅读 · 0 评论 -
mysql 为什么使用数据索引能提高效率?
过多的索引会增加数据插入、更新和删除的开销,同时也会占用更多的磁盘空间。通过定义合适的索引,可以在数据库层面上对数据的完整性进行约束,提高数据的质量和准确性。优化连接操作:在连接查询中,索引可以帮助MySQL快速定位到连接条件匹配的数据行,加快连接操作的速度。当执行查询语句时,MySQL可以利用索引快速定位到满足查询条件的数据行,减少了全表扫描的时间和IO操作的开销。加速排序:当查询需要按特定列进行排序时,索引可以为排序操作提供有序的数据,避免了数据库的临时排序操作,从而加快了排序的速度。原创 2024-04-26 13:42:44 · 1014 阅读 · 0 评论 -
sql语句中的left join和right join反着写的话,不添加其他筛选条件结果集有区别吗?例如:select * from a left join b on a.id = b.id;
相反,如果我们使用RIGHT JOIN并添加相同的WHERE条件,结果可能会有所不同,特别是如果departments表中有IT部门以外的其他部门,而这些部门在employees表中没有对应的记录。首先,回答您的问题:在SQL中,LEFT JOIN和RIGHT JOIN在逻辑上是相反的,但它们在某些情况下可以产生相同的结果集,特别是在没有额外的筛选条件(WHERE子句)时,并且当两个表中的所有记录都参与连接时。而RIGHT JOIN则会包含右表(b)的所有记录,即使左表(a)中没有匹配项。原创 2024-04-24 14:36:01 · 547 阅读 · 0 评论 -
Mybatis技术问答系列-NO9
这是MyBatis最初支持的方式,也是应用最为广泛的方式。在XML文件中,你可以定义SQL语句,包括增删改查等,每个SQL语句都有一个唯一的id,这个id需要与Mapper接口中的方法名一致。MyBatis 的插件是一种强大的机制,它允许你在 MyBatis 核心处理流程中的任意位置插入自定义代码,从而改变或增强 MyBatis 的行为。注意,使用MyBatis时,你需要保证Mapper接口、Mapper XML文件、MyBatis配置文件之间的正确配合,以确保SQL语句能够正确地被映射和执行。原创 2024-04-17 08:36:26 · 825 阅读 · 0 评论 -
Mybatis技术问答系列-NO8
如果 SQL 语句中包含动态 SQL 标签(如 、、、、、、、 等),MyBatis 会根据这些标签和提供的参数动态地生成最终的 SQL 语句。MyBatis 的动态 SQL 是基于 XML 标签和 OGNL 表达式的,它在执行查询时,会首先解析这些标签和表达式,然后根据提供的参数和条件动态地生成最终的 SQL 语句。- 根据你使用的数据库和JDBC驱动,获取主键的方式可能会有所不同。原创 2024-04-17 08:33:57 · 800 阅读 · 0 评论 -
Mybatis技术问答系列-NO7
MyBatis被称为半自动ORM映射工具,是因为它在数据库操作方面提供了一些对象关系映射的功能,但相对于全自动ORM工具(如Hibernate或Entity Framework),它提供了更多的手动干预和灵活性。这意味着,即使你有两个不同的映射文件,每个文件都有一个,MyBatis也会抛出异常,因为它无法确定当调用getUserById时应该使用哪个映射语句。同时,随着MyBatis版本的不断更新,可能会有更多新的标签和功能被引入,建议查阅最新的官方文档以获取最准确的信息。与全自动的区别在哪里?原创 2024-04-17 08:26:56 · 583 阅读 · 0 评论 -
Mybatis技术问答系列-NO6
在这个例子中,子查询 (SELECT GROUP_CONCAT(d.detail_info) FROM order_detail d WHERE d.order_id = o.order_id) 用于获取与当前订单关联的所有订单明细,并将它们连接成一个字符串。注意:由于嵌套查询在处理一对多关系时可能会遇到性能和可读性问题,因此在实际应用中,更推荐使用 标签的方式来实现一对多关联查询。MyBatis 实现一对多关联查询主要有两种方式:使用 标签在 resultMap 中进行配置和使用嵌套查询(子查询)。原创 2024-04-16 07:58:47 · 1027 阅读 · 0 评论 -
Mybatis技术问答系列-NO5
Mybatis的接口绑定是指Mybatis允许开发者仅仅通过一个接口而不需要编写实现类,即可完成对数据库操作的映射。具体而言,开发者可以在Mybatis中任意定义接口,并将接口里的方法和SQL语句进行绑定,这样便可以直接调用接口方法实现数据库操作,从而简化数据库操作的开发过程。通过注解绑定:在接口的方法上加上@Select、@Update、@Insert、@Delete等注解,并在注解中直接编写SQL语句。原创 2024-04-16 07:46:17 · 685 阅读 · 0 评论 -
Mybatis技术问答系列-NO4
由于MyBatis是通过方法名和参数类型来找到对应的SQL语句的,因此如果DAO接口中有两个方法名相同但参数列表不同的方法,MyBatis会认为这是两个不同的方法,而不是方法重载。在某些情况下,如果实体类的属性名和数据库表的字段名只是简单的驼峰和下划线的区别(例如Java属性名为userName,而数据库字段名为user_name),MyBatis可以自动进行映射。在MyBatis中,XML映射文件和DAO接口的结合使用是为了将SQL语句与Java代码分离,同时保持类型安全和易于管理的结构。原创 2024-04-16 07:41:30 · 732 阅读 · 1 评论 -
Mybatis技术问答系列-NO3
性能:在性能方面,Mybatis相对于Hibernate有更高的灵活性,可以根据需求进行细致的SQL优化,这在某些特定场景下可能会带来更好的性能。总结来说,#{}和${}的主要区别在于预处理和安全性。${}:主要用于需要动态构建SQL语句的场景,例如动态指定表名、列名,或者在某些特殊情况下,当你知道参数值是安全的,并且需要直接嵌入到SQL语句中时。${}:主要用于需要动态构建SQL语句的场景,例如动态指定表名、列名,或者在某些特殊情况下,当你知道参数值是安全的,并且需要直接嵌入到SQL语句中时。原创 2024-04-15 08:30:05 · 1049 阅读 · 0 评论 -
Mybatis技术问答系列-NO2
1.SQL映射文件:首先,需要有一个SQL映射文件,它通常是一个XML文件,其中包含要执行的SQL语句以及与这些语句关联的Java对象。当实体类属性名和数据库表查询返回的字段名一致时,可以直接使用resultType属性指定目标对象的类型,MyBatis会自动将查询结果映射到该类型的对象中。2.修改SQL语句:插件会根据当前的分页参数(如当前页数和每页显示的记录数)来修改原始的SQL语句,添加分页相关的语法。这种方式可以在不改变SQL语句的情况下,通过注解的形式指定字段与属性的映射关系。原创 2024-04-15 08:25:23 · 454 阅读 · 0 评论 -
Mybatis技术问答系列-NO1
MyBatis是一个开源的、轻量级的数据持久化框架,它是JDBC和Hibernate的替代方案。MyBatis 作为一个流行的数据持久化框架,具有许多显著的优点,这些优点使得它在许多项目中成为首选的数据库操作工具。此外,MyBatis插件的主要功能是拦截和修改MyBatis在执行SQL语句过程中的行为,包括SQL重写、日志记录、性能监控、事务管理增强以及结果集处理等。总的来说,MyBatis是一个功能强大且灵活的数据持久化框架,能够帮助开发人员更高效地处理数据库操作。三.Mybatis框架的缺点有哪些?原创 2024-04-15 08:17:05 · 876 阅读 · 0 评论 -
MySQL技术问答系列-NO5
存储过程可以视为数据库内置的一种编程语言,具有自己的变量、if语句、循环语句等,可以将多条SQL语句以逻辑代码的方式串联起来,按照一定的逻辑执行。查询表是查询结果对应的表,而视图表是由基本表和其他视图表导出的表,是虚表,不对应实际存储的数据。NULL 是一个特殊的标记,用于表示某个字段的值是缺失的或未知的。数据库设计时的三个范式(1NF、2NF、3NF)是为了确保数据库的结构合理、减少数据冗余和保证数据的完整性。在数据库设计中,了解基本表的概念及其特点是至关重要的,它有助于设计高效、灵活的数据库系统。原创 2024-04-06 08:40:31 · 727 阅读 · 0 评论 -
MySQL技术问答系列-NO4
除了上述四部分,SQL还包括一些用于连接和操作多个表的关键字,如JOIN(包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN)用于将多个表连接起来,以及FROM用于指定查询的数据源,WHERE用于添加筛选条件,GROUP BY用于按指定列对查询结果进行分组,HAVING用于对分组后的结果进行筛选等。SQL注入漏洞产生的原因主要是由于应用程序在接收用户输入时,未能对用户输入进行充分的验证和过滤,导致攻击者可以通过构造恶意的SQL语句来干扰或篡改应用程序的数据库查询。原创 2024-04-06 08:38:39 · 619 阅读 · 0 评论 -
MySQL技术问答系列-NO3
这些权限表在MySQL的权限管理中起着至关重要的作用,它们共同协作,确保用户只能访问其被授权的资源,从而保证了数据库的安全性。DECIMAL字段类型用于存储精确的定点数值,可以指定总共的位数和小数点后的位数,非常适合用于存储货币金额,因为货币金额通常需要精确到小数点后几位。MySQL中支持事务的存储引擎主要是InnoDB,它提供了对ACID事务的支持,以及其他一些与事务处理相关的功能,如行级锁定和外键约束。然而,需要注意的是,并非所有的MySQL存储引擎都支持事务。四.MySQL列的字符串类型可以是什么?原创 2024-04-05 09:02:05 · 852 阅读 · 0 评论 -
MySQL技术问答系列-NO2
由于BLOB存储的是二进制数据,因此它通常不能直接读取和修改,需要通过应用程序或数据库提供的特定功能进行处理,例如图片的缩放或裁剪。在存储方式方面,BLOB数据通常以二进制文件的形式存储在数据库中,而TEXT数据则以文本的形式存储,可以直接读取和修改。NOW()函数返回当前的日期和时间,其格式为“YYYY-MM-DD HH:MM:SS”,其中YYYY表示年份,MM表示月份,DD表示日期,HH表示小时,MM表示分钟,SS表示秒。实际上,索引的数量和列的选择应该根据具体的查询需求和数据表的结构来优化。原创 2024-04-05 09:00:00 · 366 阅读 · 0 评论 -
MySQL技术问答系列-NO1
MyISAM是MySQL数据库中一种常用的存储引擎,它适用于读取频率较高、写入频率较低的场景,比如用于只读或者读写比例较小的应用。尽管 TIMESTAMP 列具有很多有用的特性,但在某些情况下,如需要表示更广泛的日期范围或不受时区影响的情况下,使用 DATETIME 类型可能更为合适。在MySQL中,MyISAM和InnoDB是两种常见的存储引擎,它们在数据存储、事务处理、锁机制等方面有着显著的区别。MySQL中的MyISAM和InnoDB是两种最常用的存储引擎,它们在多个方面存在显著的差异。原创 2024-04-05 08:57:21 · 571 阅读 · 0 评论 -
优化MySQL慢查询思路
5、检查数据库实例所在的机器的性能配置,是否太低,是否可以适当增加资源。3、检查所查询字段是否都是必须的,是否查询了过多字段,查出了多余数据。1、检查是否走了索引,如果没有则优化SQL利用索引。4、检查表中数据是否过多,是否应该进行分库分表了。2、检查所利用的索引,是否是最优索引。优化MySQL慢查询思路。原创 2024-03-28 08:18:57 · 222 阅读 · 0 评论 -
理解MySQL锁
1、共享锁:也就是 读锁,一个事务给某行数据加了读锁,其他事务也可以读,但不能写。2、排它锁:也就是写锁,一个事务给某行数据加了写锁,其他事务不能读,也不能写。1、共享锁:也就是读锁,一个事务给某行加了读锁,其他事务也可以读,但不能写。1、乐观锁:并不会真正的去锁某行记录,而是通过一个版本号来实现的。在事务的隔离级别实现中,就需要利用所来解决幻读。2、悲观锁:上面所有的行锁、表锁等都是悲观锁。2、表锁:锁整张表,锁颗粒度最大,并发度低。3、间隙锁:锁的是一个区间。原创 2024-03-28 08:15:46 · 172 阅读 · 0 评论 -
Innodb如何实现事务的
5、如果事务提交,那么则把RedoLog对象进行持久化,后续还有其他机制将Buffer pool 中修改的数据页持久化到磁盘中。1、Innodb在收到一个update语句后,会先根据条件查找数据所在的页,并将该页缓存在Buffer Pool中。2、执行update语句,修改Buffer Pool中的数据,也就是内存中的数据;3、针对update语句生成一个RedoLog对象,并存在LogBuffer中;4、针对update语句生成undolog日志,用于事务回滚。原创 2024-03-27 08:25:42 · 501 阅读 · 0 评论 -
Redis和MySQL保证数据一致
2、先删除Redis缓存数据,再更新MySQL,再次查询的时候再将数据添加到缓存中,这种方案能解决1方案的问题,但是在高并发下性能较低,而且仍然会出现数据不一致的问题,比如线程1删除了Redis缓存数据,正在更新MySQL,此时另外一个线程查询再查询,那么就会把MySQL中老数据有查到Redis中。1、先更新MySQL,再更新Redis,如果更新Redis失败,可能数据不一致。原创 2024-03-27 08:23:53 · 183 阅读 · 0 评论 -
Mybatis是否支持延迟加载
在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true,默认是关闭的。2、当调用目标方法时,进入拦截器invoke方法,发现目标方法是null值,执行sql查询。延迟加载的意思:在需要用到数据时才进行加载,不需要用到数据时就不加载数据。3、获取数据以后,调用set方法设置属性值,再继续查询目标方法,就有值了。Mybatis支持一对一关联对象和一对多管理集合对象的延迟加载。Mybatis支持延迟加载,但默认没有开启。1、使用CGLIB创建目标对象的代理对象。原创 2024-03-17 09:50:46 · 574 阅读 · 0 评论 -
Mybatis一级和二级缓存
需要单独开启,一个是核心配置,一个是mapper映射文件。一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存。当某个作用域(一级缓存Session/二级缓存NameSpaces)的进行了新增、修改、删除操作后,默认该作用域下所有select中的缓存将被clear。Mybatis的二级缓存什么时候会清理缓存中的数据?原创 2024-03-17 09:50:01 · 464 阅读 · 0 评论