<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaoshuzuiwuqing的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaoshuzuiwuqing]]></copyright><item><title><![CDATA[Redis面试题：Redis是单线程的，但是为什么还那么快？I/O多路复用模型]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134647429</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134647429</guid><author>xiaoshuzuiwuqing</author><pubDate>Mon, 27 Nov 2023 15:52:53 +0800</pubDate><description><![CDATA[目前的I/O多路复用都是采用的epoll模式实现，它会在通知用户进程Socket就绪的同时，把已就绪的Socket写入用户空间，不需要挨个遍历Socket来判断是否就绪，提升了性能。在Redis6.0之后，为了提升更好的性能，在命令回复处理器使用了多线程来处理回复事件，在命令请求处理器中，将命令的转换使用了多线程，增加命令转换速度，在命令执行的时候，依然是单线程。2、采用单线程，避免不必要的上下文切换可竞争条件。执行操作，不影响主线程的正常使用，不会产生阻塞。3、使用多路I/O复用模型，非阻塞IO。]]></description><category></category></item><item><title><![CDATA[Redis面试题：分片集群相关问题]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134646625</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134646625</guid><author>xiaoshuzuiwuqing</author><pubDate>Mon, 27 Nov 2023 15:29:57 +0800</pubDate><description><![CDATA[分片集群主要解决的是，海量数据存储的问题，集群中有多个master，每个master保存不同数据，并且还可以给每个master设置多个slave节点，就可以继续增大集群的高并发能力。当客户端请求可以访问集群任意节点，最终都会被转发到正确节点。Redis 集群引入了哈希槽的概念，有 16384 个哈希槽，集群中每个主节点绑定了一定范围的哈希槽范围， key通过 CRC16 校验后对 16384 取模来决定放置哪个槽，通过槽找到对应的节点进行存储。嗯~，在redis集群中是这样的。]]></description><category></category></item><item><title><![CDATA[Redis面试题：哨兵模式相关问题，以及脑裂问题]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134646272</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134646272</guid><author>xiaoshuzuiwuqing</author><pubDate>Mon, 27 Nov 2023 15:20:12 +0800</pubDate><description><![CDATA[首先可以搭建主从集群，再加上使用redis中的哨兵模式，哨兵模式可以实现主从集群的自动故障恢复，里面就包含了对主从服务的监控、自动故障恢复、通知；，我们当时使用的是主从（1主1从）加哨兵。关于解决的话，我记得在redis的配置中可以设置：第一可以设置最少的salve节点个数，比如设置至少要有一个从节点才能同步数据，第二个可以设置主从数据复制和同步的延迟时间，达不到要求就拒绝请求，就可以避免大量的数据丢失。这个在项目很少见，不过脑裂的问题是这样的，我们现在用的是redis的哨兵模式集群的。]]></description><category></category></item><item><title><![CDATA[Redis面试题：Redis集群方案有哪些，介绍一下主从同步]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134645809</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134645809</guid><author>xiaoshuzuiwuqing</author><pubDate>Mon, 27 Nov 2023 15:06:31 +0800</pubDate><description><![CDATA[候选人：嗯，是这样的，单节点Redis的并发能力是有上限的，要进一步提高Redis的并发能力，可以搭建主从集群，实现读写分离。一般都是一主多从，主节点负责写数据，从节点负责读数据，主节点写入数据之后，需要把数据同步到从节点中面试官。]]></description><category></category></item><item><title><![CDATA[Redis面试题：分布式锁相关问题]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134645250</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134645250</guid><author>xiaoshuzuiwuqing</author><pubDate>Mon, 27 Nov 2023 14:51:17 +0800</pubDate><description><![CDATA[这个是不能的，比如，当线程1加锁成功后，master节点数据会异步复制到slave节点，此时当前持有Redis锁的master节点宕机，slave节点被提升为新的master节点，假如现在来了一个线程2，再次加锁，会在新的master节点上加锁成功，这个时候就会出现两个节点同时持有一把锁的问题。：嗯，是可以重入的。嗯~，redis本身就是支持高可用的，做到强一致性，就非常影响性能，所以，如果有强一致性要求高的业务，建议使用zookeeper实现的分布式锁，它是可以保证强一致性的。]]></description><category></category></item><item><title><![CDATA[Redis面试题：Redis的数据淘汰策略有哪些？]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134632252</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134632252</guid><author>xiaoshuzuiwuqing</author><pubDate>Sun, 26 Nov 2023 20:03:30 +0800</pubDate><description><![CDATA[嗯~，这个要看redis的数据淘汰策略是什么，如果是默认的配置，redis内存用完以后则直接报错。我们在项目设置的allkeys-lru，挑选最近最少使用的数据淘汰，把一些经常访问的key留在redis中。可以使用 allkeys-lru （挑选最近最少使用的数据淘汰）淘汰策略，那留下来的都是经常访问的热点数据。是可以在redis的配置文件中进行设置的，里面有两个非常重要的概念，一个是LRU，另外一个是LFU。LRU的意思就是最少最近使用，用当前时间减去最后一次访问时间，这个值越大则淘汰优先级越高。]]></description><category></category></item><item><title><![CDATA[Redis面试题：Redis的数据过期策略有哪些？]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134632197</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134632197</guid><author>xiaoshuzuiwuqing</author><pubDate>Sun, 26 Nov 2023 20:01:26 +0800</pubDate><description><![CDATA[第一种是惰性删除，在设置该key过期时间后，我们不去管它，当需要该key时，我们在检查其是否过期，如果过期，我们就删掉它，反之返回该key。SLOW模式是定时任务，执行频率默认为10hz，每次不超过25ms，以通过修改配置文件redis.conf 的。FAST模式执行频率不固定，每次事件循环会尝试执行，但两次间隔不低于2ms，每次耗时不超过1ms。第二种是 定期删除，就是说每隔一段时间，我们就对一些key进行检查，删除里面过期的key。嗯~，在redis中提供了两种数据过期删除策略。两种策略进行配合使用。]]></description><category></category></item><item><title><![CDATA[Redis面试题：redis做为缓存，数据的持久化是怎么做的？两种持久化方式有什么区别呢？这两种方式，哪种恢复的比较快呢？]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134616748</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134616748</guid><author>xiaoshuzuiwuqing</author><pubDate>Sat, 25 Nov 2023 16:48:10 +0800</pubDate><description><![CDATA[RDB因为是二进制文件，在保存的时候体积也是比较小的，它恢复的比较快，但是它有可能会丢数据，我们通常在项目中也会使用AOF来恢复数据，虽然AOF恢复的速度慢一些，但是它丢数据的风险要小很多，在AOF文件中可以设置刷盘策略，我们当时设置的就是每秒批量写入一次命令。AOF的含义是追加文件，当redis操作写命令的时候，都会存储这个文件中，当redis实例宕机恢复数据的时候，会从这个文件中再次执行一遍命令来恢复数据。：在Redis中提供了两种数据持久化的方式：1、RDB 2、AOF。]]></description><category></category></item><item><title><![CDATA[Redis面试题：redis做为缓存，mysql的数据如何与redis进行同步呢？（双写一致性）]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134616262</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134616262</guid><author>xiaoshuzuiwuqing</author><pubDate>Sat, 25 Nov 2023 16:23:24 +0800</pubDate><description><![CDATA[redis做为缓存，mysql的数据如何与redis进行同步呢？（双写一致性）：嗯！就说我最近做的这个项目，里面有xxxx（）的功能，需要让数据库与redis高度保持一致，因为要求时效性比较高，我们当时采用的读写锁保证的强一致性。我们采用的是redisson实现的读写锁，在读的时候添加共享锁，可以保证读读不互斥，读写互斥。当我们更新数据的时候，添加排他锁，它是读写，读读都互斥，这样就能保证在写数据的同时是不会让其他线程读数据的，避免了脏数据。这里面需要注意的是读方法和写方法上需要使用同一把锁才行。]]></description><category></category></item><item><title><![CDATA[Redis面试题-缓存穿透，缓存击穿和缓存雪崩]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134615693</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/134615693</guid><author>xiaoshuzuiwuqing</author><pubDate>Sat, 25 Nov 2023 15:54:12 +0800</pubDate><description><![CDATA[候选人嗯~~，我想一下缓存穿透是指查询一个一定不存在的数据，如果从存储层查不到数据则不写入缓存，这将导致这个不存在的数据每次请求都要到 DB 去查询，可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话，我们通常都会用布隆过滤器来解决它面试官候选人嗯，是这样~布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组，里面存放的二进制0或1。]]></description><category></category></item><item><title><![CDATA[kubernetes（k8s）介绍]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/132331066</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/132331066</guid><author>xiaoshuzuiwuqing</author><pubDate>Wed, 16 Aug 2023 23:10:43 +0800</pubDate><description><![CDATA[kubernetes，是一个全新的基于容器技术的分布式架构领先方案，是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本，于2014年9月发布第一个版本，2015年7月发布第一个正式版本。kubernetes的本质是一组服务器集群，它可以在集群的每个节点上运行特定的程序，来对节点中的容器进行管理。自我修复：一旦某一个容器崩溃，能够在1秒中左右迅速启动新的容器弹性伸缩：可以根据需要，自动对集群中正在运行的容器数量进行调整服务发现：服务可以通过自动发现的形式找到它所依赖的服务负载均衡。]]></description><category></category></item><item><title><![CDATA[整合Seata，Seata控制分布式事务]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/132234023</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/132234023</guid><author>xiaoshuzuiwuqing</author><pubDate>Fri, 11 Aug 2023 17:17:40 +0800</pubDate><description><![CDATA[3，导入依赖，注意seata-all的版本 0.7.1 和seata-server版本对应。6，导入file.conf和registry.conf,并修改。5，DataSourceProxy代理自己的数据源。2，安装事务协调器，seata-server。1，每一个微服务创建undo_log表。4，修改seata配置。]]></description><category></category></item><item><title><![CDATA[整合短信验证码]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131847017</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131847017</guid><author>xiaoshuzuiwuqing</author><pubDate>Fri, 11 Aug 2023 15:53:00 +0800</pubDate><description><![CDATA[【代码】整合短信验证码。]]></description><category></category></item><item><title><![CDATA[springSession整合]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131878573</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131878573</guid><author>xiaoshuzuiwuqing</author><pubDate>Fri, 11 Aug 2023 15:52:31 +0800</pubDate><description><![CDATA[【代码】springSession整合。]]></description><category></category></item><item><title><![CDATA[整合RabbitMQ]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/132165538</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/132165538</guid><author>xiaoshuzuiwuqing</author><pubDate>Tue, 08 Aug 2023 14:58:59 +0800</pubDate><description><![CDATA[3. @RabbitListener 监听消息的方法可以有三种参数（不分数量，顺序）2. RabbitTemplate：消息发送处理组件。1. AmqpAdmin：管理组件。]]></description><category></category></item><item><title><![CDATA[异步编排前期配置]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131845002</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131845002</guid><author>xiaoshuzuiwuqing</author><pubDate>Fri, 21 Jul 2023 09:48:10 +0800</pubDate><description><![CDATA[【代码】异步编排前期配置。]]></description><category></category></item><item><title><![CDATA[前端部署以及本地域名配置]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131839925</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131839925</guid><author>xiaoshuzuiwuqing</author><pubDate>Thu, 20 Jul 2023 21:23:43 +0800</pubDate><description><![CDATA[1，使用SwitchHost



2，配置nginx



修改gulimall.conf文件





3，修改网关路由配置



4，把静态资源放到nginx上，页面文件放到templates中
]]></description><category></category></item><item><title><![CDATA[CompletableFuture 异步编排]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131839728</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131839728</guid><author>xiaoshuzuiwuqing</author><pubDate>Thu, 20 Jul 2023 21:03:01 +0800</pubDate><description><![CDATA[CompletableFuture 提供了四个静态方法来创建一个异步操作。1、runXxxx 都是没有返回结果的，supplyXxx 都是可以获取返回结果的2、可以传入自定义的线程池，否则就用默认的线程池；]]></description><category></category></item><item><title><![CDATA[异步&线程池]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131827699</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131827699</guid><author>xiaoshuzuiwuqing</author><pubDate>Thu, 20 Jul 2023 13:18:49 +0800</pubDate><description><![CDATA[1）、继承 Thread2）、实现 Runnable 接口3）、实现 Callable 接口 + FutureTask （可以拿到返回结果，可以处理异常）4）、线程池方式 1 和方式 2：主进程无法获取线程的运算结果。不适合当前场景方式 3：主进程可以获取线程的运算结果，但是不利于控制服务器中的线程资源。可以导致 服务器资源耗尽。方式 4：通过如下两种方式初始化线程池通过线程池性能稳定，也可以获取执行结果，并捕获异常。但是，在业务复杂情况下，一 个异步调用可能会依赖于另一个异步调用的执行结果。]]></description><category></category></item><item><title><![CDATA[SpringCache基本用法全]]></title><link>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131788370</link><guid>https://blog.youkuaiyun.com/xiaoshuzuiwuqing/article/details/131788370</guid><author>xiaoshuzuiwuqing</author><pubDate>Tue, 18 Jul 2023 17:05:28 +0800</pubDate><description><![CDATA[ Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术；并支持使用 JCache（JSR-107）注解简化我们开发； Cache 接口为缓存的组件规范定义，包含缓存的各种操作集合；Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现 ； 如 RedisCache ， EhCacheCache , Concurrent]]></description><category></category></item></channel></rss>