自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试问题小结

每周6下午XX点会向全球各地的幼儿园发送邮件,咋实现(定时任务) 各国时间时区不同!我们有很多幼儿园,每个幼儿园都能自定义自己的属性,数据库中咋存储(我们用一个数据库专门存,这些幼儿园申请的属性)new 一个对象 内存的变化 (JVM的堆里面去说,对象分三部分对象头,实例数据,无意义填充)Bitmap的使用,咋用的,如果10个人来签到,你咋设计(一个人一个map)50w男 50w女 ,在B+树中咋存储的(类似下面的图,变通一下就行了)说说你的项目,从里面学到啥了(随便说)浏览器输入URL然后他是咋传输的(

2024-05-24 21:16:20 519

原创 Redis的I/O多路复用

单线程去监控多个Socket,当有某个Socket可读可写是回返回通知,避免无效等待,一旦有请求到达,就会交给Redis线程处理,实现了Redis单线程处理多个IO流的效果。select和poll是按照轮询的方式去查找就绪的Socker,而epoll能精准的找到就绪的Socker并把它写入用户空间。对接收参数转化指令和命令回复做了优化,减少了网络IO导致性能下降的问题。Redis是单线程的,为什么还那么快?2.redis使用I/O多路复用模型。1.redis是基于内存的。Redis的网络模型。

2024-04-06 19:00:00 400

原创 Sentinel 的QPS限流和Redis流量风控

限制了每秒钟只能有一个创建XXX的请求被成功处理。多余的请求在该时间段内会被限流处理(如返回错误信息、等待、丢弃等),直到下一秒开始重新计数。这样可以防止短时间内大量请求对服务端造成压力,保证系统的稳定性和可用性。我们可以通过这个过滤器得知,再timeWindow时间内,我们的访问次数是否超过设定的currentAccessCount。用redis的自增,key不存在,设置值为1,每次访问加1。配置过滤器器执行lua脚本,判断访问次数是否超过。如果触发风控,设置降级策略。yaml里面配置风控的参数。

2024-03-29 18:58:48 697

原创 关于Redission读写锁

读写锁是一种用于管理对共享资源的访问的同步机制,允许多个线程同时读取共享资源,但在写入时保证独占访问,以确保数据的一致性和完整性。

2024-03-26 18:30:00 1010

原创 记录一下写项目时的小Tips

这段配置的作用是将 MyBatis Plus 的分页功能集成到 Spring Boot 项目中,使得在进行数据库查询时可以方便地使用 MyBatis Plus 提供的分页查询功能,而无需手动编写分页查询的 SQL 语句。总所周知,mp的使用能够简化我们CURD的过程,当我们用mp删除一个数据的时候,注意一般的删除都是逻辑删除。如creatTime,updateTime这些数据,我们在insert或者update的时候就会同步修改。如上,我们的DeFlag是删除标识:0代表没有删除,1代表删除了,我们如何。

2024-03-21 20:43:22 533 1

原创 后端如何返回404地址

通过添加这个依赖,开发者可以在Spring Boot应用中使用Thymeleaf来渲染动态网页,利用Thymeleaf的语法特性进行变量替换、条件判断、循环遍历等操作,从而实现视图层与模型数据的绑定。比如我们前端发请求想要拿某个数据,数据并不存在,我们就可以跳转,404页面也不一定就要是404嘛。这样当我们后端在处理请求的时候,通过自己的IF判断,去跳转404页面。当我们网站输入不存在的地址,经常会出现404的页面,这是如何做到的。

2024-03-20 20:46:00 512 1

原创 Redis缓存穿透的几种解决方案

最近做项目遇到了缓存的一些问题,总结一下解决方法是指在缓存中查询一个一定不存在的数据,由于缓存不命中,导致请求直接访问数据库,这将导致大量的请求打到数据库上,可能会导致数据库压力过大。具体原理:缓存穿透一般有几种解决方案:1.缓存空值当查询结果为空时,也将结果进行缓存,但是设置一个较短的过期时间。这样在接下来的一段时间内,如果再次请求相同的数据,就可以直接从缓存中获取,而不是再次访问数据库。这种方式是比较简单的一种实现方案,可以很好解决缓存穿透问题,但是会存在一些弊端。那就是当。

2024-03-19 21:00:00 1634 1

原创 异常随笔xx1

提供基础的 Spring MVC 配置支持。在 Spring Boot 中,Spring Boot 自动配置了大量的 Spring MVC 组件,但是如果开发者需要进行更细粒度的。通过自定义异常,更准确的表达错误情况。这样可以避免因未处理的异常导致的程序崩溃,提高程序的稳定性和可靠性。,例如自定义拦截器、过滤器、视图解析器、消息转换器等,就可以通过扩展。第二步,为了标准的表达,自己写的话,当然是方便可以省略啦!通过使用全局异常拦截器,我们可以捕获应用程序中的。当然,开发还有更规范的异常定义处理。

2024-03-16 20:28:53 922 1

原创 MYSQL-分库分表

1.什么是分库分表分库分表是一种数据库优化策略,主要去解决数据不断增长访问压力增大带来的单个数据库或者单个表性能瓶颈问题。通过分库分表,来提升系统的读写性能,扩展性和可用性。分库和分表都有两种模式:什么情况下分库分表:1.什么情况下分表:数据量过大或者数据库对应的磁盘文件过大2.什么情况下分库:数据库连接不够用3.什么情况下分库又分表:高并发写入或查询。数据量巨大场景。

2024-03-10 21:08:29 1100 1

原创 Gateway网关

Gateway网关的过滤器分为两种,一种是局部过滤器,一种是全局过滤器。过滤器,顾名思义,就是过滤一些请求,在这里,全局过滤器的作用是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑需要自己写代码实现。

2024-03-06 09:15:00 976 1

原创 Fegin基本使用

Feign 是声明式、模板化的 HTTP 客户端, 可以帮助我们更快捷、优雅地调用 HTTP API总结:我们之前使用RestTomplate去拉去注册中心的服务,实现远程调用。而Feign使用,会到注册中心发现服务,成为一个针对 "userservice" 服务的,当调用方法时,实际上是向 "userservice" 提供的服务端点发送了一个 GET 请求。引入了Feign后,代码不在冗余,也更方便我们管理。

2024-03-05 09:30:00 448

原创 Nacos配置管理篇

这一篇主要学习:1.微服务拉去配置Nacos配置2.Nacos配置的热更新3.多环境配置的读取和优先级项目启动正常流程:Nacos配置管理,这些配置以后多用来做热更新,存放一些开关配置信息,方便以后统一管理服务流程如下:我们引入了bootstrap.yml,因为项目启动要先读nacos的配置,以前的nacos地址配置在yml中了,我们没法获取nacos地址。而bootstrap.yml的优先级更高,我们把nacos地址存在这里面,项目启动时,然后根据地址按照流程图以此进行。

2024-03-04 09:15:00 663 1

原创 Nacos注册中心

Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。nacos可以通过定义namespace来配置不同的空间,不在同一个namespace下的服务。,我们也有性能好的机器,性能差的机器,这样的话同一个集群下随机访问就不是很好了。服务消费者导入依赖(同上),配置yml,消费者要注入RestTemplate。如果本地集群失效了,会访问外地的集群,日志提示警告。,运行成功,点击网址,账户密码默认为nacos。解压,然后到bin目录下,打开命令行,输入。

2024-03-03 09:00:00 1900

原创 RabbitMQ详解,入门到基本使用

AMQP不是某个具体的软件产品或服务,而是一种通用的标准接口,任何遵循AMQP协议的软件系统都可以实现相互之间的互联互通,无论它们是由何种编程语言编写,运行在什么操作系统之上。简而言之,Spring AMQP的目标是让开发者更易于在Spring应用程序中使用消息队列服务,降低消息驱动架构的复杂性,提高开发效率。交换机的作用是把消息按照一定的规则路由给队列,交换机不能缓存消息,路由失败,消息丢失。支付服务要调用别的服务,调用了订单服务,在调用仓储服务,在以此调用别的,时间长。消息的路由器,把消息路由到队列。

2024-02-29 21:42:52 871

原创 用户签到相关实现

我们用11 去 并 上 1,结果为1:代表签到了,count+1。结果为0,没签到,此时的count就是我们的连续签到天数,break循环即可。签到了,把11的二进制右移动1为,再次 并 上 1重复该循环。11的二进制:1011,循环第一次,&1不为0,count++=1,右移动,变成 0101,sign:1:2024:02 = 0000000000000000001011,总长22。循环第二次,&1不为0,count++=2,右移动,变成 0010,循环第二次,&1为0,break,count=2;

2024-02-22 09:15:00 400 1

原创 Geo-Redis的基本使用

1.关于opsForGeo().radius里面有一个Circle的参数,diantance的距离单位默认是英里,所以我们要选择一下;2.opsForGeo().radius()的limit限定了我们获取多少个,但不符合分页,用stream流的skip实现。5.根据ids批量查询shop时,要用到ORDER BY FIELD确保顺序是按照解析出来的id顺序查询的。我们以店铺不同的类型typeId为key,把店铺的经纬度,还有id存入Redis。根据用户所在的地点,搜索店铺,根据距离由近到远的展示。

2024-02-21 09:30:00 344 1

原创 [达人探店]-好友关注

Feed。

2024-02-17 09:30:00 877 1

原创 SpringCloud入门

微服务是一种架构,这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中。1.搭建EurekaServer---导入Server依赖---启动类添加注解---yml配置信息2.注册服务---导入Client依赖---yml配置信息3.服务拉取---硬编码换成注册服务时,服务的name。

2024-02-07 21:49:15 425 1

原创 [达人探店]-点赞篇

我们可以使用Redis的ZSet。2.如果Set存在value,说明点过赞了,update-1,然后remove移除Set集合。3.Zset 中的元素 是 有序 的 , 根据 排序的索引 或者 元素的评分 可以获取 指定范围 的 成员;1.推文的id拼接作为key,把当前用户的userid作为value。2.Zset 中的元素 是 不可重复的 , 但是 元素 关联 的。

2024-02-05 09:15:00 347 1

原创 Redis秒杀优化

开始的秒杀步骤:1.查优惠卷2.判断库存3.查订单4.校验一人一单5.减库存6.创建订单这些 涉及到大量数据库的操作,所以在的情况下,性能不高。优化方案:1.在Redis里面进行,库存判断,一人一单的校验。2.通过的话,创建并保存订单,把订单放入阻塞队列,开启新线程异步读取队列的订单,完成下单业务的基本操作。阻塞队列异步秒杀的问题:1.内存限制。2.数据安全问题,如果服务宕机,会导致内存数据丢失,任务丢失。但就如上面所说,阻塞队列仍然存在问题。所以接下来我们引入消息队列去解决。

2024-02-03 09:15:00 406 1

原创 分布式锁-Redisson

此外,我们还以为给这些独立的节点再加上从节点 Slave,即使一个独立节点宕机了导致其对应的从节点变成新的主节点,且节点上锁标识丢失了也没有关系,因为我们只有在每一个节点都拿到锁才算成功, 尽管可以在这个空虚的节点上获取到锁,但在其他节点上是获取不到的,最终仍然是失败,因此只要有任意一个节点存货,其他线程就不可能拿到锁,就不会出现锁失效问题。此时,我们想获取锁就必须依次向多个 Redis 都去获取锁(之前直接向 Master 节点获取就可以),多个 Redis 节点都保存锁的标识,才算获取成功。

2024-02-01 09:15:00 830

原创 基于Redis的分布式锁

这也是有问题的,极端情况下,线程1先拿到锁,进行业务,但是业务堵塞了,时间到了,锁自己释放了,但是业务还没执行。这时候线程2来了,拿到了锁,去执行业务,这时候线程1不堵塞了,执行业务,完成后,释放锁,释放的是线程1的锁。线程2还在跑业务呢,这时候线程3来了,拿锁,执行业务。线程1,拿锁,执行业务,然后释放锁,刚判断完标识,准备释放的时候堵塞了。超时导致锁自动释放,线程2,拿锁,执行业务,这时候线程1不堵塞了,释放锁,释放的是线程2的锁。:1.线程的业务堵塞,自己的锁超时释放,自己释放了其他线程的锁?

2024-01-29 22:36:54 405

原创 秒杀问题的解决和实现(单体系统)

Override// 1.查询优惠卷// 2.秒杀是否开始if(!return Result.fail("秒杀时间未到,请等候");// 3.秒杀是否结束return Result.fail("秒杀结束,请下次参与");// 4.优惠卷的库存够么?return Result.fail("秒杀失败,库存不足");// toString 底层逻辑还是new 一个对象,同一个id,会有不同的锁,所以用intern// 一人一单,不能你一个人抢好多卷把.count();

2024-01-28 08:15:00 358 1

原创 Redis缓存穿透和缓存击穿

*** 获取锁* @return*/// setIfAbsent这个方法是key不存在才可以存储。key存在反而不能存储// 解决拆箱/*** 释放锁*//*** 加锁解决缓存击穿* @return*/// 先从缓存中查询// 查到了就// ""!= null 是true// 如过第一次查询id穿透了,strJson = null if语句走不通,第二次 strJson=”“,if语句为true= null) {

2024-01-07 16:37:27 375 1

空空如也

空空如也

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

TA关注的人

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