- 博客(64)
- 收藏
- 关注
原创 Redis Zset的底层原理
当采用的是ZipList,慢慢添加元素,会往跳表转化,在zsetadd方法中做判断,具体逻辑是这样的,判断编码是不是ZipList,是的话判断当前元素是否存在,如果存在更新score分数;如果元素不存在,需要判断ZipList的长度、元素大小有没有超,如果超了,转为跳表。当元素数量不多时,HT和SkipList的优势不明显,而且更耗内存。元素数量大于最大entries,或每个元素都大于value字节,就采用哈希表+调表的结果,否则采用ZipList;因此,zset底层数据结构必须满足。
2024-04-29 14:52:01
711
原创 Redisson分布式锁,重试锁和锁续命的原理
获取当前时间,线程ID,尝试获取锁,判断锁失效后自动释放的时间是否等于-1,如果不等于,就用自己的锁释放时间,如果等于-1,异步调用tryLockInnerAsync,返回值是个Future,第一个参数是等待时间,第二个参数是锁释放时间,看门狗的默认30秒,第三个是时间单位,第四个参数是线程ID,这个方法内是个lua脚本,成功返回空,是否返回过期时间;如果锁已经释放了,计算剩余等待时间,判断剩余等待时间>0,开始循环,就可以重新获取锁,和上面一样,如果失败,同时上,但这里用的是信号量。会在等待内不断重试;
2024-04-28 15:12:14
2956
原创 踩坑之——navicat连接mysql报1130错误的解决方法
猜想是无法给远程连接的用户权限问题。结果这样子操作mysql库,即可解决。在本机登入mysql后,更改“mysql”数据库里的 “user”表里的 “host”项,从“localhost”改称’%'。
2023-07-25 13:36:45
1592
原创 SpringRetry重试机制(3秒上手)
这些错误可能是因为网络波动造成的,等待过后重处理就能成功。spring-retry可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。
2023-05-23 10:53:59
1325
原创 Spring Security 入门使用
用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用户身份认证表现形式有:用户名密码登录,微信扫码等方式。项目包括学生、学习机构的老师、平台运营人员三类用户,不管哪一类用户在访问项目受保护资源时都需要进行身份认证。比如:发布课程操作,需要学习机构的老师首先登录系统成功,然后再执行发布课程操作。创建订单,需要学生用户首先登录系统,才可以创建订单。
2023-05-16 17:20:30
476
原创 Sentinel 入门使用
源码地址官方文档详细的介绍请参考sentinel官方文档随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。
2023-05-12 16:14:54
1194
原创 服务熔断Hystrix入门
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。包裹请求:使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用 了设计模式中的“命令模式”。跳闸机制:当某服务的错误率超过一定的阈值时,Hystrix可以自动或手动跳闸,停止请求该服务 一段时间。资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。
2023-05-11 13:36:54
765
原创 gateway设置了server.servlet.context-path不起作用(已解决)
gateway 没办法设置 context-path ,针对这个场景可以自定义拦截器来处理。
2023-04-24 09:31:28
1963
原创 LocalDateTime类型的数据 转 json 后数据格式并不是我们要的年月日时分秒(已解决)
字段为 LocalDateTime 类型的数据,转为转json 后数据格式并不是我们要的年月日时分秒。
2023-04-19 11:13:29
575
原创 springboot解决跨域问题
浏览器向服务端发生请求,发生跨域问题。出这个提示的原因是基于浏览器的同源策略,去判断是否跨域请求,同源策略是浏览器的一种安全机制,从一个地址请求另一个地址,如果协议、主机、端口三者则不是跨域,否则就是跨域请求。比如:从http://localhost:8601 到 http://localhost:8602 由于端口不同,是跨域。从http://192.168.101.10:8601 到 http://192.168.101.11:8601 由于主机不同,是跨域。
2023-04-03 13:20:36
166
原创 elasticsearch基于docker搭建集群
我们会在单机上利用docker容器运行多个es实例来模拟es集群。不过生产环境推荐大家每一台服务节点仅部署一个es的实例。部署es集群可以直接使用docker-compose来完成,但这要求你的Linux虚拟机至少有的内存空间。
2023-03-24 16:42:23
1118
原创 elasticsearch与mysql数据同步
elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的。在hotel-demo中完成消息监听,并更新elasticsearch中数据。导入课前资料提供的hotel-admin项目,启动并测试酒店数据的CRUD。在hotel-admin中的增、删、改业务中完成消息发送。在hotel-admin和hotel-demo中的。在hotel-demo中的。
2023-03-23 15:22:10
2753
2
原创 Spring 事务事件控制 解决业务异步操作解耦 TransactionSynchronizationManager Transaction
在业务中,经常需要在执行数据库操作后(事务提交完成),发送消息或事件来异步调用其他组件执行相应的业务操作。用户注册成功后,发送激活码或激活邮件,如果用户保存后就执行异步操作发送激活码或激活邮件,但是前面用户保存后发生异常,数据库进行回滚,用户实际没有注册成功,但用户收到激活码或激活邮件。此时,我们就迫切要求数据库事务完成后再执行异步操作。
2023-03-23 14:07:39
525
1
原创 elasticsearch的入门使用03
默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smarttokenizer filter:将tokenizer输出的词条做进一步处理。
2023-03-22 14:33:31
518
原创 elasticsearch的入门使用02
match和multi_match的区别是什么?match:根据一个字段查询multi_match:根据多个字段查询,参与查询字段越多,查询性能越差精确查询常见的有哪些?term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段range查询:根据数值范围查询,可以是数值、日期的范围query:查询条件from和size:分页条件sort:排序条件highlight:高亮条件。
2023-03-17 17:04:45
493
原创 elasticsearch的入门使用01
Elasticsearch是一个实时的分布式开放源代码全文本搜索和分析引擎。可从RESTful Web服务界面访问它,并使用无模式的JSON(JavaScript对象表示法)文档存储数据。它基于Java编程语言构建,因此Elasticsearch可以在不同平台上运行。它使用户能够以很高的速度浏览大量的数据。
2023-03-16 14:50:43
357
原创 docker安装elasticsearch(一条龙服务)
在互联网项目中,在网络间传输的速度很快,所以很多语言是不允许在网络上传递的,如:关于宗教、政治等敏感词语,那么我们在搜索时也应该忽略当前词汇。随着互联网的发展,“造词运动”也越发的频繁。出现了很多新的词语,在原有的词汇列表中并不存在。比如:“奥力给”,“摆烂” 等。这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。IK分词器也提供了强大的停用词功能,让我们在索引时就直接忽略当前的停用词汇表中的内容。所以我们的词汇也需要不断的更新,IK分词器提供了扩展词汇的功能。
2023-03-15 16:30:01
1020
原创 解决RabbitMQ消息是Java 对象序列化后的数据
显然,JDK序列化方式并不合适。我们希望消息体的体积更小、可读性更高,因此可以使用JSON方式来做序列化和反序列化。
2023-03-14 16:33:41
464
原创 Docker入门使用
*数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。而要自定义镜像,就必须先了解镜像的结构才行。
2023-03-13 17:27:33
184
原创 Centos7安装Docker、DockerCompose
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为stabletest和nightly三个更新频道。官方网站上有各种环境下的,这里主要介绍 Docker CE 在 CentOS上的安装。
2023-03-10 13:59:18
699
原创 微服务——sentinel
Sentinel是阿里巴巴开源的一款断路器实现,目前在Spring Cloud的孵化器项目Spring Cloud Alibaba 中的一员Sentinel本身在阿里内部已经被大规模采用,非常稳定。因此可以作为一个较好的替代品。
2023-03-10 10:18:12
282
原创 微服务——Hystrix的使用
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。包裹请求:使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用 了设计模式中的“命令模式”。跳闸机制:当某服务的错误率超过一定的阈值时,Hystrix可以自动或手动跳闸,停止请求该服务 一段时间。资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。
2023-03-07 11:28:49
2897
原创 Gateway服务网关
网关搭建步骤:创建项目,引入nacos服务发现和gateway依赖配置application.yml,包括服务基本信息、nacos地址、路由路由配置包括:路由id:路由的唯一标示路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡路由断言(predicates):判断路由的规则,路由过滤器(filters):对请求或响应做处理接下来,就重点来学习路由断言和路由过滤器的详细知识过滤器的作用是什么?① 对路由的请求或响应做加工处理,比如添加请求头。
2023-03-03 14:57:43
187
原创 微服务中使用Feign远程调用
Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。
2023-03-03 08:51:32
989
原创 nacos入门使用
其实微服务启动时,会去nacos读取多个配置文件,例如:[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml[spring.application.name].yaml,例如:userservice.yaml而[spring.application.name].yaml不包含环境,因此可以被多个环境共享。下面我们通过案例来测试配置共享2.4.1添加一个环境共享配置。
2023-03-01 13:29:16
458
原创 Linux安装nacos
Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行。注: -m standalone 单机模式启动。二.上传nacos安装包。
2023-03-01 09:24:49
262
原创 基于Redis实现全局唯一ID
当用户抢购时,就会生成订单并保存到DB中,而订单表如果使用数据库自增ID就存在一些问题:id的规律性太明显受单表数据量的限制场景分析:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。场景分析二:随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证id的唯一性。
2023-02-16 15:47:57
248
原创 Redis缓存击穿问题及解决思路
缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
2023-02-16 13:20:36
3491
7
原创 springboot集成Rabbitmq——消费者手动应答
参数2:是否批量否定多个消息,设为false就与basicReject功能一样,triue的前提也是在同一个channel,且在该消息否定前存在未确认的消息。basicAck方法是肯定的交付,一般在该消息处理完后执行,该消息才会在队列里面被删除,不然会处于UnAcked的状态存在队列中。参数2: 是否批量确认消息,前提是在同一个channel里面,且是在该消息确认前没有被确认的消息才能批量确认。消费者默认是自动确认的,这是及其不安全的。参数3: 对异常消息的处理,true表示重排序,false表示丢弃。
2023-02-06 18:09:37
1950
原创 Linux 磁盘满了怎么办
lsof -n | grep deleted:查看哪个程序占用磁盘空间了。du -h --max-depth=1:查看各文件及目录大小情况。两种方式日志文件:echo "" > 文件名:写入空内容到文件中。rm -rf 文件名:直接删除文件如发现磁盘空间并未释放。kill -9 进程ID:杀掉程序。cd:切换到磁盘使用100%的分区。ll -h:找到占用磁盘的大文件。df -h:查看磁盘使用情况。
2023-02-06 13:03:52
181
原创 spring-boot 全局异常处理
加了 @RequestParam 注解,如果缺少参数,会抛出 org.springframework.web.bind.MissingServletRequestParameterException 异常。在方法上通过 @ExceptionHandler 注解来指定具体的异常,然后在方法中处理该异常信息,最后将结果通过统一的 json 结构体返回给调用者。1.2测试处理参数缺失异常。2.2测试处理空指针异常。1.1处理参数缺失异常。3.2测试系统未知异常。
2023-02-03 15:04:32
310
黑马-Docker的使用
2023-03-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人