MySQL 索引失效的场景总结
数据类型不匹配。如果查询条件中的数据类型和索引列的数据类型不一致,MySQL会进行隐式类型转换,这会导致索引失效。例如,如果索引列是varchar类型,而查询条件是数字类型,MySQL会将索引列转换为数字类型进行比较,这样就无法使用索引了。解决方法是保持数据类型的一致性,或者在查询条件中使用显式类型转换。
模糊查询以%开头。如果查询条件中使用了like关键字,并且模糊匹配的字符串以%开头,那么也会导致索引失效。这是因为以%开头的模糊匹配无法确定索引列的起始位置,所以无法利用索引进行快速查找。解决方法是尽量避免使用以%开头的模糊匹配,或者使用覆盖索引(只包含索引列的查询)。
索引列使用了函数或运算。如果查询条件中对索引列进行了函数调用或运算,那么也会导致索引失效。这是因为函数或运算会改变索引列的值,使得原来的索引无法使用。解决方法是尽量避免对索引列使用函数或运算,或者建立基于函数或运算的索引(MySQL 5.7及以上版本支持)。
索引列包含空值。如果索引列中包含空值(NULL),那么在查询条件中使用IS NULL或IS NOT NULL也会导致索引失效。这是因为MySQL在建立索 ...
List拆分并使用线程池并发执行
List拆分以后使用线程池并发处理其中数据业务中需要将mq已经消费成功的数据但是调用的下游系统错误的记录重新请求一次并更新到记录中,提供了一个通过开始和结束时间处理之前失败记录的接口,但是单线程时数据量大处理的很慢,所以采用线程池启动多线程进行重新调用并更新业务结果。
定义线程池:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package com.rocketmq.consumer.config;import lombok.extern.slf4j.Slf4j;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.Thre ...
JDK8-JDK21特性概览
JDK 8 - JDK 21 特性概览JDK 8
Lambda 表达式:引入了函数式编程的概念,简化了匿名内部类的使用。
Stream API:提供了对集合数据进行函数式操作的高级抽象。
默认方法(Default Methods):接口中可以定义具体的方法实现。
方法引用(Method Reference):简化了 Lambda 表达式的使用。
新的日期和时间 API:引入了 java.time 包,提供了更好的日期和时间处理方式。
JDK 9
模块化系统(Module System):引入了 Java 平台模块系统(Java Platform Module System,JPMS)。
JShell:交互式编程工具,允许在命令行中进行实时的 Java 代码编写和执行。
私有接口方法(Private Interface Methods):接口中可以定义私有方法。
改进的 Stream API:引入了更多的操作和改进。
JDK 10
局部变量类型推断(Local Variable Type Inference):使用 var 关键字进行局部变量类型的推断。
应用类数据共享(Applic ...
私有OSS仓库实现图片预览
项目背景:接入私有OSS以后,需要实现图片上传/访问,但因仓库私有,也不像ali-oss等云服务可以提供生成临时共有访问地址,只能以流的方式从OSS读取数据并渲染到前端。
引入依赖:
1234567<!--引入AWS EDS对象存储依赖--> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.11.490</version> </dependency>
代码实现:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172package com.hsyk.bright.cli ...
mysql 删除重复数据
Mysql如何删除重复数据项目背景:在RocketMQ的消费者服务中,发现了重复消费的情况,为了处理,需先将消费者停止消费,去重消息ID重复的数据,再给消息ID设置唯一索引。
方法一:使用临时表
创建一个临时表,用于存储要保留的数据。
1CREATE TABLE consumer_crm_record_tmp LIKE consumer_crm_record;
将要保留的数据存储到临时表中
1234INSERT INTO consumer_crm_record_tmpSELECT MAX(id) AS id,message_id,message,responseFROM consumer_crm_recordGROUP BY message_id;
删除原表中的数据
1delete from consumer_crm_record
将临时表中的数据加入到原表中
123INSERT INTO consumer_crm_recordSELECT id,message_id,message,responseFROM consumer_crm_record_tmp;
...
一个注解搞定 Springboot 接口防刷
实现
首先是写一个注解类
拦截器中实现
注册到Springboot中
在Controller层中加入注解
首先是写一个注解类:123456789101112131415import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.RetentionPolicy.RUNTIME;@Retention(RUNTIME)@Target(METHOD)public @interface AccessLimit { int seconds(); int maxCount(); boolean needLogin()default true;}
拦截器中实现:12345678910111213141516171819202122232425262728293031323334353637383940 ...
SpringBoot 3.2发布,新特性真香!
Spring Boot 3.2最近发布了,让我们用 Java 21、GraalVM 和虚拟线程来尝试一下。
Spring Boot 3.2 支持:
Java 21
虚拟线程
原生镜像(自 2022 年 11 月 Spring Boot 3.0 发布以来,Spring Boot 已在生产环境中支持 GraalVM 原生镜像)
Java 21我们期待 2023 年 9 月 19 日发布的 Java 21,Spring Boot 3.2 已经做到完全支持了。
正如所声明的那样,Java 21 提供了数千项性能、稳定性和安全性改进,包括平台增强功能,可帮助开发人员提高生产力并推动整个组织的创新和增长。
虚拟线程更重要的更新之一是虚拟线程,这是 Project Loom 提供的功能。我们不打算深入细节,官方 JEP 提供了很好的解释:
https://openjdk.org/jeps/444
GraalVM 和本机镜像GraalVM 是一种高性能 JDK,可以使用替代的即时 (JIT) 编译器来加快 Java 和基于 JVM 的应用程序的性能。
Native Image 是一种提前将 ...
Elasticsearch查询中的must和should混合使用的行为解析
ElasticSearch查询中的must和should混合使用的行为解析最近在做能力开放平台,其中的功能包含日志的查看,根据用户展示对应的日志信息,在根据用户权限查询相应的日志的时候发现同时使用must和should查询日志时会查到一些本不符合条件的数据,特此记录。
在ElasticSearch中,我们可以使用must和should子句来构建复杂的查询。must子句表示所有条件都必须满足才能匹配文档,而should子句表示其中至少一个条件满足即可匹配文档。
然而,当should子句下的所有条件都不满足时,仍然可能查询出结果的情况可能会让人感到困惑。这是由于ElasticSearch的查询机制中的一个特性所导致的。
查询机制解析ElasticSearch在处理查询时,会计算每个文档的相关性得分(relevance score),并根据得分进行排序。而should子句下的条件并不是强制要求满足的条件,而是用于调整相关性得分的因素。
当一个文档的should子句下的条件都不满足时,这些条件不会导致文档被排除在结果之外。相反,ElasticSearch会根据其他条件和相关性得分来决定文档是 ...
何氏早会分享-安常处顺
何为安常处顺 出自战国·宋·庄周《庄子·养生主》:“适来,夫子时也;适去,夫子顺也。安时而处顺,哀乐不能入也。”
安常处顺,是一种古老而智慧的生活哲学。它强调在面对生活中的各种变化和挑战时,保持内心的平静和从容,以及与周围环境和谐相处。
安常意味着在日常生活中保持平静和冷静的心态。无论是遇到工作上的压力,还是个人生活中的困扰,我们都应该学会接受并适应变化,而不是过分焦虑或抵抗。通过保持内心的平和,我们能够更好地处理问题,并找到解决之道。
处顺意味着与周围环境和谐相处。我们应该尊重自然的规律和他人的存在,不去强求和改变一切。与环境相处时,我们要学会适应和调整自己,以便更好地融入其中。与他人相处时,我们要尊重彼此的差异和个人选择,以建立和谐的关系。
安常处顺不是消极和被动的态度,而是一种智慧和平衡的追求。它要求我们保持内心的稳定和平和,以应对生活中的起伏和挑战。通过接受变化、适应环境和与他人和谐相处,我们可以更好地把握机会,创造积极的结果。
现代生活中的安常处顺 在现代社会中,我们常常面临快节奏、高压力和不断变化的环境。安常处顺的理念提醒我们要保持内心的平静和从容,不被 ...
人工智能的崛起与应用
人工智能的崛起与应用人工智能(Artificial Intelligence,简称AI)是一项涉及模拟人类智能的技术和科学领域。随着计算能力的提升、数据的爆炸增长以及机器学习算法的进步,人工智能正以惊人的速度崛起,并在各个领域展示出巨大的潜力。
机器学习与深度学习机器学习是人工智能的核心技术之一,它通过让计算机从数据中学习和改进,而不是显式地进行编程。深度学习则是机器学习的一个分支,它模仿人脑神经网络的结构和功能,能够处理更加复杂的任务。这些技术的发展使得机器能够自动进行模式识别、语音识别、图像处理等任务,极大地扩展了人工智能的应用范围。
人工智能的应用领域人工智能已经渗透到了各个领域,对我们的生活和社会产生了深远的影响。以下是一些人工智能应用的例子:
自然语言处理(NLP):人工智能可以理解和处理自然语言,实现智能翻译、语音助手、智能客服等功能。
计算机视觉:人工智能能够识别图像和视频中的对象、场景和动作,应用于人脸识别、无人驾驶、安防监控等领域。
医疗健康:人工智能可以辅助医生进行诊断和治疗决策,提高医疗效率和精确度。
金融领域:人工智能在风险评估、欺诈检测、投资分析等方面发挥着 ...