4 祈雨v

尚未进行身份认证

暂无相关简介

等级
TA的排名 1w+

MySQL表字符集不同导致关联查询索引失效

概述mysql在多表之间做关联查询时,需要注意各个表的字符集是否一致。如果在字符集不一致的场景下做关联查询,会出现关联字段即使有索引,但却索引失效的问题。复现建表语句,创建两个字符集不同的表,如下:CREATE TABLE `school` ( `id` int(11) NOT NULL AUTO_INCREMENT, `school_code` varchar(255) DEFA...

2020-03-19 15:21:55

通过SSH隧道远程办公

原理SSH不仅可以用于远程主机登录,还可以作为代理转发,也就是SSH隧道。具体场景如下图,客户端可以SSH登录到外网服务器,外网服务器与内网服务器可以网络连接,但客户端与内网服务器无法网络连接。此时就可以通过SSH隧道,将客户端的请求通过外网服务器代理转发到内网服务器,再将请求返回给客户端,实现客户端与内网服务器的网络交互。操作1、建立SSH隧道建立SSH隧道可以通过XShell或者直...

2020-02-25 11:49:58

数据落盘方案

应用对已存在的文件更新时需要写入数据,当数据写入过程中异常中断例如断电,则会出现数据只写入部分的情况。在这种异常场景下,在应用恢复后对丢失数据的恢复以及避免数据写入未完全导致文件损坏均需要应用保证。数据储存单元对于硬盘来说,最小的数据储存单元是扇区,一般为512个字节(现在开始流行4096个字节);而对于操作系统来说,以扇区为读写单位太小效率太慢,所以操作系统以块为数据的读写单位。由此可见,扇...

2020-01-11 14:14:09

BeanDefinitionRegistryPostProcessor扩展

通过BeanDefinitionRegistryPostProcessor扩展能实现额外的很多功能,例如实现将一个接口动态代理,并将该代理对象在spring容器初始化完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象。代理工厂import lombok.extern.slf4j.Slf4j;import java.lang.r...

2020-01-05 15:26:52

mysql空间索引

空间索引示例CREATE TABLE `shop_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `shop_name` varchar(64) NOT NULL COMMENT '门店名称', `geom_point` geometry NOT NULL COMMENT '经纬度', PRIMARY KEY ...

2019-12-07 11:04:48

spring循环依赖过程解析

spring解决循环依赖spring在创建和依赖注入单例对象时,通过三级缓存的设计,可以解决大多数的循环依赖问题,但是基于三级缓存的解决方案,对于部分场景还是无法解决循环依赖的问题,会由spring抛出异常。spring的三级缓存由singletonObjects、earlySingletonObjects、singletonFactories组成:singletonObjects:保存初...

2019-11-09 15:33:23

elasticsearch性能优化

1、硬件优化1.1、 硬件使用固态硬盘储存设备准备足够的内存禁止使用swap交换分区1.2、 页缓存elasticsearch查询依赖操作系统的页面高速缓存(File system cache),因此除了需要给elasticsearch的JVM分配足够的内存以外,还需要给页缓存预留内存。例如单机32G内存,给JVM配置16G内存后,剩余16G预留内存不需要额外配置,也不要让其他进...

2019-10-30 20:34:46

常用加密算法

Base64import org.apache.commons.codec.binary.Base64;public class Base64Utils { public static void main(String args[]) { String value = "hello world"; // 加密 String enco...

2019-09-12 14:20:30

mysql IS NULL 使用索引

简介mysql的sql查询语句中使用is null、is not null、!=对索引并没有任何影响,并不会因为where条件中使用了is null、is not null、!=这些判断条件导致索引失效而全表扫描。mysql官方文档也已经明确说明is null并不会影响索引的使用。MySQL can perform the same optimization on col_name IS ...

2019-08-28 18:58:51

mysql字符集utf8mb4失效踩坑

现象mysql数据表的字符集已经设置成了utf8mb4,但是通过JDBC向数据库写入4字节的emoji表情时报错,但是通过直接使用命令行插入该4字节的emoji表情时却成功了。示例如下:CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(11) NOT NULL, `age`...

2019-08-17 17:39:13

xml与javaBean转换

maven<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.11.1</version></dependency>c...

2019-08-08 00:11:11

初探InnoDB MVCC源码实现

转载自博客园本文链接地址: 初探InnoDB MVCC源码实现1. 背景本文基于MySQL InnoDB源码对InnoDB中非锁定一致性读是如何实现的作一些简单的探究。2. 基本概念2.1 隐藏字段在经典之作《高性能MySQL》的1.4节中提及了MySQL中MVCC的实现,原著中提及了InnoDB implements MVCC by storing with each row tw...

2019-08-03 15:12:49

mysql索引原理

页分裂每个数据页的开头记录了当前页的编号以及该数据页的上一页和下一页的编号,如图:1-4字节为当前数据页数据的校验和;5-8字节为当前数据页的编号;9-12字节为上一个数据页的编号;13-16字节为下一个数据页的编号;即数据页以一个双向链表维持着顺序,每个数据页中以单向链表的格式对记录的RowID进行逻辑排序,并且每个数据页之间的记录进行物理排序(页编码大的数据页中的记录RowI...

2019-07-20 14:54:04

redis之list源码分析

list的数据结构redis的list的结构为quicklist,并非简单的类似java的LinkedList链表或者ArrayList数组,而是将链表和数值结合的一种数据结构。宏观上list是一个quicklist链表,通过双向指针前后连接,但是链表的每一个节点是一个ziplist字节数组,在字节数组上保存list的数据。默认配置下,每个ziplist最大为8K字节,在向满了的ziplist...

2019-07-16 18:54:28

redis之key过期源码分析

简述redis的所有数据结构都可以设置过期时间,当key过期后再查询该key返回null。redis实现key自动过期是通过额外保存需要自动过期的key和该key的过期时间,然后通过主动删除和定时任务删除两种机制来将过期的key移除并回收内存。在redis4.0版本引入了异步删除的机制,对于删除对象大小大于64字节的key,先通过Unlink方法软删除后放入回收队列中,由其他线程异步回收内存空...

2019-07-12 22:56:23

redis之string源码分析

string的对象编码string数据类型的对象编码有两种,分别是embstr和raw。两种编码的区别并不大,embstr相对于raw,内存空间连续。两者的数据格式见下图:redis的string数据之所以使用embstr和raw两种编码格式,是为了当一个string对象的值比较小时,使用一个连续的内存分区存放redisObject对象和sdshdr对象,减少内存分配和回收的消耗。embs...

2019-07-10 22:12:52

redis之hash源码分析

hash的对象编码hash数据类型的对象编码有两种,分别是OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT,即一种是以压缩数组;一种是哈希字典。两者的数据格式见下图:编码转换redis的hash数据之所以使用OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT两种编码格式,是为了当一个hash对象的键值对数据量比较小时,使用紧凑的数组格式来节省...

2019-07-08 22:57:11

java线程池之ThreadPoolExecutor

线程池状态转换java.util.concurrent.ThreadPoolExecutor为JDK的线程池对象,线程池的状态和状态转换如下图:使用方式ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 10, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(10));ex...

2019-07-02 18:34:58

mysql数据页结构

数据页结构mysql默认每个数据页为16KB,InnoDB引擎的Compact行记录结构由以下字段组成:变长字段长度列表null值列表记录头信息列数据1列数据N不定长不定长5字节变长字段长度列表对于非固定长度的字段类型,例如varchar、text、blob、多字节编码的char等,通过变长字段长度列表记录当前行记录的对应字段值的长度(列顺序倒序存放)...

2019-07-01 20:43:25

mysql回表致索引失效

简介mysql的innodb引擎查询记录时在无法使用索引覆盖的场景下,需要做回表操作获取记录的所需字段。mysql执行sql前会执行sql优化、索引选择等操作,mysql会预估各个索引所需要的查询代价以及不走索引所需要的查询代价,从中选择一个mysql认为代价最小的方式进行sql查询操作。而在回表数据量比较大时,经常会出现mysql对回表操作查询代价预估代价过大而导致索引使用错误的情况。案例...

2019-06-14 19:18:17

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。