<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weixin_52136521的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weixin_52136521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_52136521]]></copyright><item><title><![CDATA[redis到底是单线程还是多线程？为什么是单线程还这么快？]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144451929</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144451929</guid><author>weixin_52136521</author><pubDate>Fri, 13 Dec 2024 17:04:30 +0800</pubDate><description><![CDATA[先来处理题目第一个问题，这个问题问得非常不严谨，针对不同的问法有两种答法。先告诉你答案。1.  redis的核心业务，也就是命令处理部分是多线程还是单线程？答案： 单线程。2.  整个redis的运行是多线程还是单线程？答案： 多线程。]]></description><category></category></item><item><title><![CDATA[redis持久化机制]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144420385</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144420385</guid><author>weixin_52136521</author><pubDate>Thu, 12 Dec 2024 11:16:17 +0800</pubDate><description><![CDATA[我们知道redis的数据是在内存中的，这也是redis为什么速度这么快的原因之一，但是内存中的数据在电脑重启后就会消失，可是我们使用redis的时候并没有因为电脑重启而导致数据消失，这就证明了redis的底层肯定是把数据从内存同步到了磁盘，等开机的时候会从磁盘再同步到内存，今天我们就来聊聊redis持久化数据的方式。]]></description><category></category></item><item><title><![CDATA[如何从网关把token传到各个服务，服务又如何处理token？]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144359662</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144359662</guid><author>weixin_52136521</author><pubDate>Tue, 10 Dec 2024 11:13:42 +0800</pubDate><description><![CDATA[两种方式，但是一般采用GlobalFilter来做校验，网关里面存在一系列的过滤器，先执行下图的pre，校验都通过后再发给微服务，最后由post执行，本质上是责任链模式。而我们的GlobalFilter需要放在下图最后一个过滤器Nettty...前面。学过责任链的朋友知道，我们可以让方法继承ordered接口来控制责任链上过滤器的执行顺序，接着往下看代码。GlobalFilter代码。]]></description><category></category></item><item><title><![CDATA[解决Gateway报错Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144349631</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144349631</guid><author>weixin_52136521</author><pubDate>Mon, 09 Dec 2024 15:29:51 +0800</pubDate><description><![CDATA[这是因为 Spring Cloud Gateway 的项目中不能使用 Spring MVC 的依赖，一般是你通过依赖其它模块而间接引用了该 Spring MVC 的依赖。 也就是说，在 Spring Cloud Gateway 的项目中不能使用如下依赖。


  如果不小心引用了，则需要排除 Spring MVC 依赖。]]></description><category></category></item><item><title><![CDATA[RocketMQ与springboot3的不兼容解决办法]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144232738</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144232738</guid><author>weixin_52136521</author><pubDate>Wed, 04 Dec 2024 10:54:11 +0800</pubDate><description><![CDATA[原因：Springboot-3.0已经放弃了spring.plants。springboot3在使用rocketmq时会报下面错误。所取代，添加这个文件是为了兼容。再次启动项目，问题得以解决。在文件里面写上如下代码。]]></description><category></category></item><item><title><![CDATA[mybats-plus分页高效封装]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144231002</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144231002</guid><author>weixin_52136521</author><pubDate>Wed, 04 Dec 2024 10:37:11 +0800</pubDate><description><![CDATA[一般来说，我们每次的查询结果都要进行这么一个转换，因为查询结果里面的属性太多了，不适合都给前端，下图是查询结果Page的源码，可以看见里面除了我们需要的records、total、pages（pages在IPage里面），还有很多其他属性，我们无需传给前端的，所以上述PageDto类封装了of方法进行转换，用过 BeanUtil.copyProperties()方法的就知道这是什么意思了，没用过也没关系，总而言之就是给数据瘦身，只返回部分查询结果给前端。//    records是查询结果。]]></description><category></category></item><item><title><![CDATA[spring-bean的循环依赖]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144088682</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144088682</guid><author>weixin_52136521</author><pubDate>Wed, 27 Nov 2024 18:50:15 +0800</pubDate><description><![CDATA[阅读本篇文章之前，你应该知道一个bean被创建到单例池的流程。例如下图，类A引用类B，类B又引用类A，这种就叫做循环依赖。带你走一遍这种依赖关系的注入流程，了解一下为什么会死循环。首先实例化A,初始化A的时候发现A里面有属性B，此时去容器看B是否存在，发现并不存在，就去实例化B，同样的流程，B里面要注入A，发现A不存在，就去实例化A，这样就造成了死循环。]]></description><category></category></item><item><title><![CDATA[Spring事务失效的几种原因]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144075888</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144075888</guid><author>weixin_52136521</author><pubDate>Wed, 27 Nov 2024 10:47:20 +0800</pubDate><description><![CDATA[先来看看异常继承树这里把异常分为三类，Error，RuntimeException、CheckedException，其中CheckedException是受检异常，受检异常是由编译器强制执行的，必须捕获，也就是大概率会出异常，需要你在写代码的时候就处理一下，不然会爆红，例如IOException。Error，RuntimeException是非受检异常，代码运行的时候才可能出错，概率小一点。下面代码显示了@Transactional对哪些异常会进行补抓回滚。很明显，受检异常是无法被处理的。]]></description><category></category></item><item><title><![CDATA[索引设计原则]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144068730</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144068730</guid><author>weixin_52136521</author><pubDate>Tue, 26 Nov 2024 21:31:05 +0800</pubDate><description><![CDATA[就一张图，如果仔细看了我之前的文章，或者你自己对索引的底层、优化有了解，仔细看看下图基本能懂。我之前写过一系列索引的文章，读完后再来看看索引的使用吧。]]></description><category></category></item><item><title><![CDATA[mysql覆盖索引&回表查询]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144067554</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144067554</guid><author>weixin_52136521</author><pubDate>Tue, 26 Nov 2024 20:58:33 +0800</pubDate><description><![CDATA[就是查询的字段是索引里的。打个比方，有个user表，字段为id、name、gender，id是主键，有聚簇索引，name是非聚簇索引。第一条语句符合覆盖索引，因为查询的字段id和name是是name索引表就能查到的，不用回表查询，这里不懂没关系，后面我详细带你走一遍查询流程就明白了。第二条不符合覆盖索引，因为查询的是*，所有字段，走name索引查不到gender，就得回表查询聚簇索引。]]></description><category></category></item><item><title><![CDATA[mysql索引失效的五种情况]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144034629</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144034629</guid><author>weixin_52136521</author><pubDate>Mon, 25 Nov 2024 19:04:03 +0800</pubDate><description><![CDATA[这个是针对联合索引的。假设有个tb_seller表，现在给三个字段建立联合索引，建立的时候字段顺序不可随便设置，字段顺序： name, status, address。下图Seq_in_index对应的是联合索引顺序。判断索引失效用不懂这个可以先看我另外一篇文章最左前缀法则定义如果索引了多列，要遵守最左前缀法则。指的是查询从索引的最左前列开始，并且不跳过索引中的列。匹配最左前缀法则，走索引：现在如下图，根据最左前缀法则执行三个语句，来看看字段是否走索引。]]></description><category></category></item><item><title><![CDATA[mysql定位慢查询以及分析原因]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143976423</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143976423</guid><author>weixin_52136521</author><pubDate>Mon, 25 Nov 2024 15:35:30 +0800</pubDate><description><![CDATA[看本篇文章之前建议先了解的概念。]]></description><category></category></item><item><title><![CDATA[HashMap的寻址算法（源码分析）]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/144004092</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/144004092</guid><author>weixin_52136521</author><pubDate>Sun, 24 Nov 2024 10:57:51 +0800</pubDate><description><![CDATA[建议先看完我这篇文章。]]></description><category></category></item><item><title><![CDATA[HashMap源码详解]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143996967</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143996967</guid><author>weixin_52136521</author><pubDate>Sat, 23 Nov 2024 20:37:58 +0800</pubDate><description><![CDATA[看该篇文章之前先看看这篇基础文章先来看HashMap里面的一些参数。1.DEFAULT_INITIAL_CAPACITY 默认的数组初始容量2. DEFAULT_LOAD_FACTOR 默认的加载因子。（hashmap数组扩容机制：  扩容阈值 = 数组容量 * 加载因子）3. 你知道的，hashmap底层是数组+链表+红黑树，不知道就先看上面说的基础文章，table就是这里面的数组。4. size 集合中元素个数。]]></description><category></category></item><item><title><![CDATA[HashMap底层原理]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143996418</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143996418</guid><author>weixin_52136521</author><pubDate>Sat, 23 Nov 2024 18:57:05 +0800</pubDate><description><![CDATA[jdk1.8之后，是哈希表数据结构，也可以说是数组+链表或红黑树，下图是没有添加数据的一个hashmap。现在开始添加数据，看下面具体步骤。]]></description><category></category></item><item><title><![CDATA[什么是聚簇索引、非聚簇索引、回表查询]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143976692</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143976692</guid><author>weixin_52136521</author><pubDate>Fri, 22 Nov 2024 16:34:23 +0800</pubDate><description><![CDATA[看不懂的话建议大家先看一下数据库的索引介绍。]]></description><category></category></item><item><title><![CDATA[java秒杀业务设计]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143975509</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143975509</guid><author>weixin_52136521</author><pubDate>Fri, 22 Nov 2024 15:34:12 +0800</pubDate><description><![CDATA[一般tomcat并发量不高，例如一台tomcat有4000qps，那么1s来了1w请求，tomcat就无法处理，6000请求得丢失，此时就要考虑加集群实现负载均衡访问。当然可以，nginx大概1秒能接收5w左右请求，这里请求接收后平均分给三台tocat，tomcat的qps是4000左右，此时并发量就上到了1.2w，1w自然不在话下。nginx无法接收这么多请求了，此时还有个硬件叫做lvs，有30w的qps量，接收到这10w后均分给nginx，然后负载均衡分给tomcat。域名-DNS轮循策略。]]></description><category></category></item><item><title><![CDATA[redis哨兵模式与脑裂现象]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143935406</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143935406</guid><author>weixin_52136521</author><pubDate>Thu, 21 Nov 2024 10:54:05 +0800</pubDate><description><![CDATA[同时，因为原Master宕机了12s，没有一个（min-slaves-to-write）从节点与主节点之间的数据复制在10s（min-slaves-max-lag）内，不满足配置要求，原Master就无法执行写操作了。脑裂的主要原因其实就是哨兵集群认为主节点已经出现故障了，重新选举其它从节点作为主节点，而原主节点其实是假故障，从而导致短暂的出现两个主节点，那么在主从切换期间客户端一旦给原主节点发送命令，就会造成数据丢失。如果Master节点因为某些原因挂了12s，导致哨兵判断主节点客观下线，开始主从切换。]]></description><category></category></item><item><title><![CDATA[redis主从复制，主从同步流程]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143904938</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143904938</guid><author>weixin_52136521</author><pubDate>Wed, 20 Nov 2024 10:53:53 +0800</pubDate><description><![CDATA[如下图，单个redis处理数据上限不够就要搭建集群，搭建多个redis，其中一个为主节点，其他的为从节点，主节点进行写操作，然后同步到从节点，从节点进行读操作，这样的读写分离大大提高了redis的整体性能。那主节点如何同步数据给从节点呢？接着往下看。]]></description><category></category></item><item><title><![CDATA[分布式锁介绍]]></title><link>https://blog.youkuaiyun.com/weixin_52136521/article/details/143892254</link><guid>https://blog.youkuaiyun.com/weixin_52136521/article/details/143892254</guid><author>weixin_52136521</author><pubDate>Tue, 19 Nov 2024 18:27:46 +0800</pubDate><description><![CDATA[例如一些抢票业务，要判断库存，那必定就要加锁，由于锁属于jvm，集群部署下面多个jvm的锁不一样，单体项目没关系，集群就锁不住，这里就需要公共所，也就是分布式锁。在业务粒子细度比较大的时候，不同函数可能相互调用，例如下图，一个线程内方法一里面逻辑加锁，执行业务，业务里面调用方法二，方法二加同一把锁，如果能加成功，代表可重入，否则不是。如何实现重入锁呢？]]></description><category></category></item></channel></rss>