自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 Redis面试题:Redis是单线程的,但是为什么还那么快?I/O多路复用模型

目前的I/O多路复用都是采用的epoll模式实现,它会在通知用户进程Socket就绪的同时,把已就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪,提升了性能。在Redis6.0之后,为了提升更好的性能,在命令回复处理器使用了多线程来处理回复事件,在命令请求处理器中,将命令的转换使用了多线程,增加命令转换速度,在命令执行的时候,依然是单线程。2、采用单线程,避免不必要的上下文切换可竞争条件。执行操作,不影响主线程的正常使用,不会产生阻塞。3、使用多路I/O复用模型,非阻塞IO。

2023-11-27 15:52:53 169

原创 Redis面试题:分片集群相关问题

分片集群主要解决的是,海量数据存储的问题,集群中有多个master,每个master保存不同数据,并且还可以给每个master设置多个slave节点,就可以继续增大集群的高并发能力。当客户端请求可以访问集群任意节点,最终都会被转发到正确节点。Redis 集群引入了哈希槽的概念,有 16384 个哈希槽,集群中每个主节点绑定了一定范围的哈希槽范围, key通过 CRC16 校验后对 16384 取模来决定放置哪个槽,通过槽找到对应的节点进行存储。嗯~,在redis集群中是这样的。

2023-11-27 15:29:57 189

原创 Redis面试题:哨兵模式相关问题,以及脑裂问题

首先可以搭建主从集群,再加上使用redis中的哨兵模式,哨兵模式可以实现主从集群的自动故障恢复,里面就包含了对主从服务的监控、自动故障恢复、通知;,我们当时使用的是主从(1主1从)加哨兵。关于解决的话,我记得在redis的配置中可以设置:第一可以设置最少的salve节点个数,比如设置至少要有一个从节点才能同步数据,第二个可以设置主从数据复制和同步的延迟时间,达不到要求就拒绝请求,就可以避免大量的数据丢失。这个在项目很少见,不过脑裂的问题是这样的,我们现在用的是redis的哨兵模式集群的。

2023-11-27 15:20:12 232

原创 Redis面试题:Redis集群方案有哪些,介绍一下主从同步

候选人:嗯,是这样的,单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,可以搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据,主节点写入数据之后,需要把数据同步到从节点中面试官。

2023-11-27 15:06:31 140

原创 Redis面试题:分布式锁相关问题

这个是不能的,比如,当线程1加锁成功后,master节点数据会异步复制到slave节点,此时当前持有Redis锁的master节点宕机,slave节点被提升为新的master节点,假如现在来了一个线程2,再次加锁,会在新的master节点上加锁成功,这个时候就会出现两个节点同时持有一把锁的问题。:嗯,是可以重入的。嗯~,redis本身就是支持高可用的,做到强一致性,就非常影响性能,所以,如果有强一致性要求高的业务,建议使用zookeeper实现的分布式锁,它是可以保证强一致性的。

2023-11-27 14:51:17 530

原创 Redis面试题:Redis的数据淘汰策略有哪些?

嗯~,这个要看redis的数据淘汰策略是什么,如果是默认的配置,redis内存用完以后则直接报错。我们在项目设置的allkeys-lru,挑选最近最少使用的数据淘汰,把一些经常访问的key留在redis中。可以使用 allkeys-lru (挑选最近最少使用的数据淘汰)淘汰策略,那留下来的都是经常访问的热点数据。是可以在redis的配置文件中进行设置的,里面有两个非常重要的概念,一个是LRU,另外一个是LFU。LRU的意思就是最少最近使用,用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。

2023-11-26 20:03:30 270

原创 Redis面试题:Redis的数据过期策略有哪些?

第一种是惰性删除,在设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key。SLOW模式是定时任务,执行频率默认为10hz,每次不超过25ms,以通过修改配置文件redis.conf 的。FAST模式执行频率不固定,每次事件循环会尝试执行,但两次间隔不低于2ms,每次耗时不超过1ms。第二种是 定期删除,就是说每隔一段时间,我们就对一些key进行检查,删除里面过期的key。嗯~,在redis中提供了两种数据过期删除策略。两种策略进行配合使用。

2023-11-26 20:01:26 640

原创 Redis面试题:redis做为缓存,数据的持久化是怎么做的?两种持久化方式有什么区别呢?这两种方式,哪种恢复的比较快呢?

RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据,我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF文件中可以设置刷盘策略,我们当时设置的就是每秒批量写入一次命令。AOF的含义是追加文件,当redis操作写命令的时候,都会存储这个文件中,当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。:在Redis中提供了两种数据持久化的方式:1、RDB 2、AOF。

2023-11-25 16:48:10 1106

原创 Redis面试题:redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性)

redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性):嗯!就说我最近做的这个项目,里面有xxxx()的功能,需要让数据库与redis高度保持一致,因为要求时效性比较高,我们当时采用的读写锁保证的强一致性。我们采用的是redisson实现的读写锁,在读的时候添加共享锁,可以保证读读不互斥,读写互斥。当我们更新数据的时候,添加排他锁,它是读写,读读都互斥,这样就能保证在写数据的同时是不会让其他线程读数据的,避免了脏数据。这里面需要注意的是读方法和写方法上需要使用同一把锁才行。

2023-11-25 16:23:24 668

原创 Redis面试题-缓存穿透,缓存击穿和缓存雪崩

候选人嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它面试官候选人嗯,是这样~布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。

2023-11-25 15:54:12 208

原创 kubernetes(k8s)介绍

kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整服务发现:服务可以通过自动发现的形式找到它所依赖的服务负载均衡。

2023-08-16 23:10:43 72

原创 整合Seata,Seata控制分布式事务

3,导入依赖,注意seata-all的版本 0.7.1 和seata-server版本对应。6,导入file.conf和registry.conf,并修改。5,DataSourceProxy代理自己的数据源。2,安装事务协调器,seata-server。1,每一个微服务创建undo_log表。4,修改seata配置。

2023-08-11 17:17:40 111

原创 整合短信验证码

【代码】整合短信验证码。

2023-08-11 15:53:00 66

原创 springSession整合

【代码】springSession整合。

2023-08-11 15:52:31 63

原创 整合RabbitMQ

3. @RabbitListener 监听消息的方法可以有三种参数(不分数量,顺序)2. RabbitTemplate:消息发送处理组件。1. AmqpAdmin:管理组件。

2023-08-08 14:58:59 42

原创 异步编排前期配置

【代码】异步编排前期配置。

2023-07-21 09:48:10 50

原创 前端部署以及本地域名配置

1,使用SwitchHost2,配置nginx修改gulimall.conf文件3,修改网关路由配置4,把静态资源放到nginx上,页面文件放到templates中

2023-07-20 21:23:43 389

原创 CompletableFuture 异步编排

CompletableFuture 提供了四个静态方法来创建一个异步操作。1、runXxxx 都是没有返回结果的,supplyXxx 都是可以获取返回结果的2、可以传入自定义的线程池,否则就用默认的线程池;

2023-07-20 21:03:01 83

原创 异步&线程池

1)、继承 Thread2)、实现 Runnable 接口3)、实现 Callable 接口 + FutureTask (可以拿到返回结果,可以处理异常)4)、线程池方式 1 和方式 2:主进程无法获取线程的运算结果。不适合当前场景方式 3:主进程可以获取线程的运算结果,但是不利于控制服务器中的线程资源。可以导致 服务器资源耗尽。方式 4:通过如下两种方式初始化线程池通过线程池性能稳定,也可以获取执行结果,并捕获异常。但是,在业务复杂情况下,一 个异步调用可能会依赖于另一个异步调用的执行结果。

2023-07-20 13:18:49 58

原创 SpringCache基本用法全

 Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术;并支持使用 JCache(JSR-107)注解简化我们开发; Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合;Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现 ; 如 RedisCache , EhCacheCache , Concurrent

2023-07-18 17:05:28 753

原创 redissong-Semaphore信号量-CountDownLatch闭锁

【代码】redissong-Semaphore信号量-CountDownLatch闭锁。

2023-07-18 14:44:32 69

原创 Redisson实现分布式锁

只要占锁成功,就会启动一个定时任务【重新给锁设置过期时间,新的过期时间就是看门狗的默认时间】,每隔10秒都会自动的再次续期,续成30秒。1、如果我们传递了锁的超时时间,就发送给redis执行脚本,进行占锁,默认超时就是 我们制定的时间。读 + 读 :相当于无锁,并发读,只会在Redis中记录好,所有当前的读锁。保证一定能读到最新数据,修改期间,写锁是一个排它锁(互斥锁、独享锁),读锁是一个共享锁。问题:在锁时间到了以后,不会自动续期。读 + 写 :有读锁。写 + 读 :必须等待写锁释放。

2023-07-18 14:36:03 172

原创 分布式锁解决缓存击穿问题

依然有问题,在远程调用查询uuid时,可能在路途中锁到期自己删了,而锁的uuid可能在返回的途中,但是这时可能别人会拿到锁,而这时误判这个uuid就是自己的uuid,就会造成把别人的锁删了。依然有问题,可能在业务代码执行完之前,因为锁设置的时间到了,就已经自动的过期了,这时其他的请求进来了,可能把别人的锁给删除了。依然有问题,可能在设置过期时间之前就报错了,但是又拿到了锁,依然会发生死锁。解决:设置uuid,在删锁时,判断是不是自己的锁。解决:将获取锁和设计过期时间变成原子操作。下一步,解决锁的自动续息。

2023-07-18 13:54:58 219

原创 加锁synchronized()解决缓存击穿问题

在操作数据库逻辑里面加锁。

2023-07-18 13:03:09 135

原创 缓存失效问题-缓存击穿,穿透,雪崩

 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数 据库也无此记录,我们没有将这次查询的 null 写入缓存,这将导致这个不存在的数据每次 请求都要到存储层去查询,失去了缓存的意义。 在流量大时,可能 DB 就挂掉了,要是有人利用不存在的 key 频繁攻击我们的应用,这就是 漏洞。 解决: 缓存空结果、并且设置短的过期时间。

2023-07-18 12:35:50 46

原创 缓存与分布式锁-谷粒商城

1)升级lettuce客户端。2)切换使用jedis。

2023-07-18 12:22:02 40

原创 jconsole 与 jvisualvm

Jdk 的两个小工具 jconsole、jvisualvm(升级版的 jconsole);通过命令行启动,可监控本地和 远程应用。远程应用需要配置。

2023-07-18 09:33:23 177

原创 本机域名配置

Nginx代理给网关时,会丢失请求的host请求和一些东西,要进行配置。修改nginx+windows域名访问配置。搭建域名使用switchhosts。Nginx配置路由到网关,负载均衡。

2023-07-18 08:51:29 160

原创 模板引擎thymeleaf的使用(另一种技术是react)

Templates:模板,放页面。Static:放静态资源。

2023-07-18 08:47:41 204 1

原创 JSR303 数据校验

@Constraint(validatedBy = { ListValueConstraintValidator.class【可以指定多个不同的校验器,适配不同类型的校验】 })3)、默认没有指定分组的校验注解@NotBlank,在分组校验情况@Validated({AddGroup.class})下不生效,只会在@Validated生效;3)、给校验的bean后紧跟一个BindingResult,就可以获取到校验的结果。3)、关联自定义的校验器和自定义的校验注解。4)、分组校验(多场景的复杂校验)

2023-07-14 13:42:14 80 1

原创 云存储服务-对象存储服务-SpringCloud Alibaba-OSS(会出现跨域问题,要在阿里官网选择允许跨域)

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储 服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优 化存储成本。

2023-07-14 13:38:36 173 1

原创 使用mybatis-plus实现逻辑删除

【代码】使用mybatis-plus实现逻辑删除。

2023-07-14 13:33:37 217 1

原创 跨域问题解决

java项目中跨域问题解决

2023-07-13 11:22:53 74 1

原创 java项目-谷粒商城,前端开发基础知识

Vue,MVVM 思想,计算属性和侦听器,组件化,生命周期钩子函数,vue 模块化开发

2023-07-12 16:38:04 142 1

原创 java项目-谷粒商城(持续更新ing)

SpringCloud Alibaba-Nacos[作为注册中心],SpringCloud Alibaba-Nacos[作为配置中心]

2023-07-09 13:06:18 113 1

原创 java项目-谷粒商城(持续更新ing)

利用脚手架工程完成项目的前期环境搭建

2023-07-08 16:49:53 181

原创 java项目-谷粒商城

项目简介,分布式基础概念,环境搭建

2023-07-07 14:08:33 705 1

原创 UV统计(UV统计-HyperLogLog)

UV统计-HyperLogLog,测试百万数据的统计

2023-06-06 19:07:36 946

原创 Redis消息队列(基于List实现消息队列,基于PubSub的消息队列,基于Stream的消息队列,基于Stream的消息队列-消费者组,基于Redis的Stream结构作为消息队列,实现异步秒杀)

认识消息队列,基于List实现消息队列,基于PubSub的消息队列,基于Stream的消息队列,基于Stream的消息队列-消费者组,基于Redis的Stream结构作为消息队列,实现异步秒杀下单

2023-06-06 19:04:03 168

原创 基于Redis实现秒杀优化(异步秒杀思路,Redis完成秒杀资格判断,基于阻塞队列实现秒杀优化)

秒杀优化-异步秒杀思路,秒杀优化-Redis完成秒杀资格判断,秒杀优化-基于阻塞队列实现秒杀优化

2023-06-06 18:54:15 291

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除