- 博客(16)
- 收藏
- 关注
原创 MySQL查询不区分大小写问题
现象在使用MySQL字符串查询的时候遇到这么一个问题,查询没有区分大小写,如下图所示查询name的时候,使用A去查询或者使用a去查询,结果是一样的。限定讨论范围仅讨论表的创建;仅讨论表中列值的大小写查询问题;仅讨论字符集编码utf8,排序规则utf8_general_ci,utf8_bin;原因MySQL字符集与排序规则首先要说到MySQL的字符集与排序规则,在创建一张表时,可以指定表的字符集与排序规则,也可以指定列的字符集排序规则。(本文不讨论数据库各个级别配置对列的字符集和排序规
2021-03-27 21:19:20
674
1
原创 ShardingSphere --shardingJDBC
ShardingJDBCShardingJDBC在业务中的定位图核心概念逻辑表:水平拆分的数据库的相同逻辑和数据库表的总称;真实表:在分片的数据库中真实存在的物理表;数据节点:数据分片的最小单元,有数据源名称和数据表组成;绑定表:分片规则一致的主表和字表广播表:也叫公共表,指所有分片数据源中都存在的表,表结构和表中的数据在每个-数据库中都完全一致,例如字典表。分片键:用于分片的数据库字段,是将数据库(表)进行水平拆分的关键字段。SQL中若没有分片字段,将会执行全路由,性能较差。分片算法
2021-03-18 13:32:09
499
原创 Dubbo服务导出浅析
基于Spring的Dubbo服务导出。方法入口为ServiceBean.export(),此方法会调用ServiceConfig.export()方法,进行真正的服务导出。服务导出原理服务导出的入口为ServiceBean的export()方法,当Spring启动完之后,通过接收SpringContextRefreshedEvent事件来触发export()方法的执行。一个ServiceBean对象就表示一个Dubbo服务,ServiceBean对象中的参数就表示服务的参数,比如timeout,该对象
2021-03-17 13:47:12
734
原创 Redis核心数据结构底层实现
String使用SDS(simple dynamic string)实现。3.2版本前struct sdshdr { //长度 int len; //剩余长度 int free; //数据本体 char buf[]; }3.2版本以后主要有以下几个字段len 长度,有uint8_t、uint16_t、uint64_t 这几种类型alloc 已经分配的空间,有uint8_t、uint16_t、uint64_t 这几种类型unsigned char
2021-03-16 20:05:38
976
原创 Redis Sentinel(哨兵)
作用当故障发生时可以自动进行主从切换,程序可以不用重启。将Redis Sentinel集群看成是一个Zookeeper集群,它是集群高可用的心脏,它一般是由3~5个节点组成,这样挂了个别节点集群还可以正常运转。它负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的(优先级->数据量->run ID)从节点切换为主节点。客户端来连接集群时,会首先连接sentinel,通过sentinel来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点故障时,客户端会重新想sentin
2021-03-15 16:14:22
1734
原创 Redis主从同步流程
主从同步流程(全量)slave与master建立socket连接;slave向master发送PSYNC命令请求复制数据(无论slave是否为第一次连接);master收到PSYNC命令后,会在后台进行数据持久化;通过bgsave生成最新的rdb快照文件bgsave期间,将客户端发送的命令(会修改数据集的)缓存到内存中;持久化完毕后,master将这份RDB数据发送给slave;slave会把接收到的数据进行持久化生成RDB,然后再加载到内存中。master继续将之前缓存在内存中的命
2021-03-13 23:21:53
1021
2
原创 Redis过期策略
Redis所有的数据结构都可以设置过期时间,时间一到就会自动删除。思考:Redis是单线程的,删除key的时间也会占用线程的处理时间,如果删除过于频繁,会导致CPU负载过高吗,会导致线上读写指令出现卡顿吗?下面来谈谈Redis的两种删除策略。两种删除策略定时删除(集中处理)Redis会将每个设置了过期时间的key放入到一个独立的字典中,定时遍历这个字典来删除到期的key。Redis默认每秒进行十次过期扫描,过期扫描不会遍历过期字典中的所有key,而是采用了一种简单的贪心策略。从过期字典中随机
2021-03-12 09:39:06
923
原创 Redis缓存穿透案例
表关系描述类似于好友之间的关联关系,有表N,M以及N与M的关联关系表,N表与M表假设均有100W的数据,M与N两者关系是一个稀疏矩阵(只有少部分之间有关系,大约10%)。业务场景通过表N中的一条记录,来查询关联的M有哪些人,并且这是一个高频次操作。存在的问题mysql单库承受如此多的查询请求,容易拖垮整个库。解决方案以下解决方案的目的是为了过滤掉空查询。Redis设置空值方案描述在查询到N与M关联关系表中的空值时,就往Redis存储一个空值,设置一个的过期时间(固定时间+随机时间),大约
2021-03-11 09:39:44
1034
原创 缓存与数据库双写不一致
在大并发下,多线程操作数据库与缓存会存在两者数据不一致的问题。首先重要的是先更新数据库,在失效缓存。读写并发不一致情况线程1先更新数据库,将字段t改为6,然后将缓存失效,线程结束。线程2过来读数据库,读取到了t为6的信息,在准备插入缓存之前发生了线程调度,线程3过来更新数据库,并且将缓存失效后线程3结束,然后线程2继续插入数据,此时缓存中的数据是6,而数据库的数据是7,出现了不一致的情况。时序图如下图所示:![image.png](https://img-blog.csdnimg.cn/img_co
2021-03-10 14:26:31
1009
原创 Redis缓存穿透、缓存击穿、缓存雪崩、热点key过期
缓存穿透缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常处于容错考虑,如果从存储层查不到数据,则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个:自身业务代码或者数据出现问题。恶意攻击、爬虫等造成大量空命中。缓存穿透问题的解决方案:缓存空对象布隆过滤器缓存击穿(失效)由于大批量缓存在同一时间失效可能导致大量请求同事穿透缓存直达数据库,可能会造成数据库瞬间压力过大甚至挂掉,对于这种情况
2021-03-09 22:29:30
992
1
原创 mysql数据恢复方案
前言本文主要讲述在误操作后,恢复某个时间点之前的数据方式。实验环境mysql - 8.0.19macOS catalina 10.15.3mysql binlog 开启,并为row格式数据库准备创建数据库CREATE TABLE `user_info` ( `id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int DEFAULT NULL, `create_tim
2020-05-08 20:00:33
1099
原创 使用BigDecimal中的构造函数时,传参为double类型的问题
使用内容public BigDecimal(double val){}api解释此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于 0.10000000000000000555111512312578270211815834045...
2018-09-07 16:46:27
11511
原创 mysql的配置文件
前言以下是经过实践的mysql配置文件,版本信息:5.6.41-log内容# For advice on how to change settings please see# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html# *** DO NOT EDIT THIS FIL...
2018-09-07 16:41:56
10373
转载 单例模式详解
单例的目的在应用中如果有两个或者两个以上的实例会引起错误(在整个应用中,同一时刻,有且只能有一种状态)尽可能的节约内存空间,减少无谓的GC消耗,并且使应用可以正常运作单例的实现静态实例,带有static关键字的属性在每一个类中都是唯一的。限制客户端随意创造实例,即私有化构造方法,此为保证单例的最重要的一步。给一个公共的获取实例的静态方法,注意,是静态的方法,因为这个方法...
2018-09-07 16:32:26
10178
原创 websocket连接经过zuul网关的坑
前言之前的项目中,使用zuul网关统一过滤域名,为了管理方便,想要尝试看看能不能使用zuul管理websocket连接。现象描述高版本的websocket在第一次http请求后,使用的是更快速的tcp连接zuul网关只能管理http请求,并且不支持tcp以及udp请求websocket在经过zuul以后,就会降级会http请求(轮询的方式)结论最好是不要通过zu...
2018-09-07 16:31:31
30794
4
转载 mybatis返回自增主键
前言本文仅仅记录返回主键的结论,不进行源码分析结论以下insertOrUpdate 为insert on duplicate key update + 使用@Param注入入参时,在任何情况下keyProperty必须用”@Param的入参名字.主键属性名” (entity.id)的形式才能正确解析到入参对象上并设置主键 + 批量insert时,采用@Param的注解是没有办法...
2018-09-07 16:30:20
13157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人