- 博客(177)
- 收藏
- 关注
原创 Redis-04原理篇:
try {// 1.建立连接// 2.获取输出流、输入流// 3.发出请求// 3.1.获取授权 auth 123321// 3.2.set name 虎哥sendRequest("set", "name", "虎哥");// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 5.释放连接try {if (reader!if (writer!if (s!
2025-02-17 16:11:29
822
2
原创 Redis-03高级篇下-最佳实践:
Key的最佳实践固定格式:[业务名]:[数据名]:[id]足够简短:不超过44字节不包含特殊字符Value的最佳实践:合理的拆分数据,拒绝BigKey选择合适数据结构Hash结构的entry数量不要超过1000设置合理的超时时间并不是很慢的查询才是慢查询,而是:在Redis执行时耗时超过某个阈值的命令,称为慢查询。
2025-02-17 16:10:56
825
原创 Redis-03高级篇中-多级缓存:
传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈Redis缓存失效时,会对数据库产生冲击浏览器访问静态资源时,优先读取浏览器本地缓存访问非静态资源(ajax查询数据)时,访问服务端请求到达Nginx后,优先读取Nginx本地缓存如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat)如果Redis查询未命中,则查询Tomcat。
2025-02-17 16:10:27
1100
原创 Redis-03高级篇上-分布式缓存:
因为redis主节点可能会出现宕机的情况,或者集群扩容添加了节点,或者集群伸缩删除了节点都有可能,如果一个节点删除了或者宕机了上面的数据也跟着丢了,如果数据是和插槽绑定当节点宕机的时候,可以将这个节点对应的插槽转移到活着的节点,集群扩容时也可以将节点转移,这样数据跟着插槽走,是不是永远能够找到数据所在位置啊。因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。
2025-02-17 16:10:00
795
原创 Redis-02实战篇下:
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路那么分布式锁他应该满足一些什么样的条件呢?可见性:多个线程都能看到相同的结果,注意:这个地方说的可见性并不是并发编程中指的内存可见性,只是说多个进程之间都能感知到变化的意思互斥:互斥是分布式锁的最基本的条件,使得程序串行执行高可用:程序不易崩溃,时时刻刻都保证较高的可用性高性能:由于加锁本身就让性能降低,
2025-02-17 16:09:21
998
原创 Redis-02实战篇上:
亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来一起看看实战篇我们要学习一些什么样的内容这一块我们会使用redis共享session来实现通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容通过本章节,我们可以学会Redis的计数器功能, 结合Lua完成高性能的redis操作,同时学会Redis分布式锁的原理,包括Redis的三种消息队列我们利用Re
2025-02-17 16:08:19
658
原创 Redis-01基础篇:NoSQL简介、Redis简介、Redis安装、连接Redis的客户端,常见命令,Redis的Java客户端:Jedis、SpringDataRedis(ObjMapper)
键值型NoSql其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。对于存储的数据,没有类似Mysql那么严格的约束,比如唯一性,是否可以为null等等,所以我们把这种松散结构的数据库,称之为NoSQL数据库。除了上述四点以外,在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差异,总结如下:BASE:基本一致存储方式。
2025-02-17 16:01:13
689
原创 JUC 高并发编程的入门学习
课程内容概览什么是 JUCLock 接口线程间通信集合的线程安全多线程锁Callable 接口JUC 三大辅助类: CountDownLatch CyclicBarrier Semaphore读写锁: ReentrantReadWriteLock阻塞队列ThreadPool 线程池Fork/Join 框架CompletableFuture1 什么是 JUC1.1 JUC 简介在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC就是 java.u
2024-09-20 00:49:38
974
原创 黑马-Cloud21版-面试篇13:Sentinel源码分析
例如,我们在order-service服务中,将的方法标记为一个资源。1)首先在order-service中引入sentinel依赖</</</2)然后配置Sentinel地址spring:cloud:sentinel:transport:dashboard: localhost:8089 # 这里我的sentinel用了8089的端口3)修改OrderService类的queryOrderById方法// 创建Entry,标记资源,资源名为resource1。
2024-09-02 00:58:31
1397
原创 黑马-Cloud21版-面试篇12:Nacos源码分析
protobuf的全称是Protocol Buffer,是Google提供的一种数据序列化协议,这是Google官方的定义:Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。可以简单理解为,是一种跨语言、跨平台的数据传输格式。与json的功能类似,但是无论是性能,还是数据大小都比json要好很多。
2024-09-02 00:58:20
1529
原创 黑马-Cloud21版-面试篇11:微服务常见面试题
这个题目主要考察对SpringCloud的组件基本了解:简单SpringCloud包含的组件很多,有很多功能是重复的。其中最常用组件包括:注册中心组件:Eureka、Nacos等负载均衡组件:Ribbon远程调用组件:OpenFeign网关组件:Zuul、Gateway服务保护组件:Hystrix、Sentinel服务配置管理组件:SpringCloudConfig、Nacos。
2024-09-02 00:58:05
2388
原创 黑马-Cloud21版-高级篇10:RabbitMQ-高级篇
既然通过回调机制来实现,就要编写回调函数。ReturnCallback:指消息到了交换机,但是路由的过程中失败了。每个RabbitTemplate只能配置一个RabbitTemplate是spring帮我们创建的,这个bean一定是一个单例的bean,整个容器只有一个,每个RabbitTemplate只能配置一个ReturnCallback,所以就不能每次在发消息时来配。
2024-09-02 00:57:53
770
原创 黑马-Cloud21版-高级篇09:多级缓存
多级缓存0.学习目标1.什么是多级缓存传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈Redis缓存失效时,会对数据库产生冲击多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能:浏览器访问静态资源时,优先读取浏览器本地缓存访问非静态资源(ajax查询数据)时,访问服务端请求到达Nginx后,优先读取Nginx本地
2024-09-02 00:57:39
1244
原创 黑马-Cloud21版-高级篇07:分布式事务
说明:在刚才呢我们已经学习了cap的定理,我们知道在分布式系统下因为分区不可避免,所以你不得不在一致性和可用性之间做出一个选择,但是这两个特性都非常重要,我一个都不想放弃那该如何办呢???解决:BASE理论(基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。
2024-09-02 00:57:15
805
原创 黑马-Cloud21版-高级篇06:微服务保护:初识Sentinel,流量控制,隔离和降级,授权规则,规则持久化
什么是雪崩问题?微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。Sentinel是阿里巴巴开源的一款微服务流量控制组件。丰富的应用场景。
2024-09-02 00:57:01
800
原创 黑马-Cloud21版-实用篇05:分布式搜索引擎03:数据聚合,自动补全,数据同步,集群
默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。默认的拼音分词器存在的问题不会分词: “如家酒店还不错” 的全拼首字母放在一块了,说明这句话没有被分词而是作为整体出现了。每个字都分词:“如家酒店还不错” 的每一个字都形成了拼音,这没什么用还不如形成全品呢,比如 rujia。没有汉字只剩拼音:大部分用的还是使用中文搜索而不是拼音搜索,有拼音只是锦上添花但你不能把汉字扔了。
2024-09-02 00:56:39
1094
原创 黑马-Cloud21版-实用篇05:分布式搜索引擎02:DSL查询文档、搜索结果处理、RestClient查询文档、黑马旅游案例
分布式搜索引擎02在昨天的学习中,我们已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。所以今天,我们研究下elasticsearch的数据搜索功能。我们会分别使用DSL和RestClient实现搜索。0.学习目标1.DSL查询文档elasticsearch的查询依然是基于JSON风格的DSL来实现的。1.1.DSL查询分类Elasticsearch提供了基于JSON的DSL(Domain
2024-09-02 00:56:27
1190
原创 黑马-Cloud21版-实用篇05:分布式搜索引擎01:es的概念以及安装es、kibana,索引库操作,文档操作,java代码操作索引库,java代码操作文档
分布式搜索引擎01– elasticsearch基础0.学习目标1.初识elasticsearch说明:随着业务的发展我们的数据量越来越庞大,传统的这种mysql数据库就渐渐的难以满足我们复杂的业务需求了,所以在微服务架构下一般都会用到一种分布式搜索的技术,今天就开始学习分布式搜索当中最为流行的一种elasticsearch。1.1.了解ES1.1.1.elasticsearch的作用elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需
2024-09-02 00:56:09
981
1
原创 黑马-Cloud21版-实用篇04:RabbitMQ的基本使用:初识MQ、快速入门、SpringAMQP
基本消息队列的消息发送流程:建立connection创建channel利用channel声明队列利用channel向队列发送消息基本消息队列的消息接收流程:建立connection创建channel利用channel声明队列定义consumer的消费行为handleDelivery()利用channel将消费者与队列绑定多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用是什么?接收publisher发送的消息。
2024-09-02 00:55:38
1067
原创 黑马-Cloud21版-实用篇03:Docker概念,基本操作(镜像 容器 数据卷),Dockerfile自定义镜像,Docker-Compose集群部署,私服镜像仓库
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个真实目录。宿主机文件系统中的真实目录-------对应数据卷-------对应容器内部的目录在容器内部的目录写东西,那么这些东西会立即写到宿主机文件系统里。反过来在宿主机文件系统里对某个文件进行了修改,也会立即反映到容器内的这样一个目录中去。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
2024-09-02 00:55:17
994
原创 黑马-Cloud21版-实用篇02:Nacos配置管理、集群,Feign远程调用、Feign的抽取优化,Gateway服务网关、网关中的跨域问题
使用Feign的步骤:① 引入依赖② 添加@EnableFeignClients注解③ 编写FeignClient接口④ 使用FeignClient中定义的方法代替RestTemplate类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象(远程调用的结果是json类型会自动转化为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式。
2024-09-02 00:54:52
1065
原创 黑马-Cloud21版-实用篇01:微服务学习路线,单体、分布式、微服务架构的演变,服务拆分和RestTemplate,Eureka注册中心(模拟启动),Ribbon负载均衡,Nacos注册中心
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。
2024-09-02 00:54:31
1170
原创 安装OpenResty
首先你的Linux虚拟机必须联网你可以在你的 CentOS 系统中添加openresty仓库,这样就可以便于未来安装或更新我们的软件包(通过命令)。然后再重复上面的命令然后就可以像下面这样安装软件包,比如openrestyopm是OpenResty的一个管理工具,可以帮助我们安装一个第三方的Lua模块。如果你想安装命令行工具opm,那么可以像下面这样安装默认情况下,OpenResty安装的目录是:/usr/local/openresty。
2024-08-17 17:43:43
680
原创 cloud-Redis集群
我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。
2024-08-07 09:09:06
1038
原创 NATAPP内网穿透使用
可以将本地的内网ip映射到外网上,远程访问该连接,实现外网展示网站。平时做的应用开发都只能在局域网本地访问,通过内网穿透,可以通过外网进行访问。
2024-07-06 20:15:09
601
原创 第10章 项目总结02:针对当前项目的面试题
由多个服务通过网络完成一个事务叫分布式事务。比如:课程发布操作不仅要在本地数据库插入课程信息,而且还要请求索引服务将课程信息添加到索引库,还要请求MinIO将课程静态化并上传静态页面,这里就存在分布式事务。1)缓存穿透:去访问一个数据库不存在的数据无法将数据进行缓存,导致查询数据库,当并发较大就会对数据库造成压力。缓存穿透可以造成数据库瞬间压力过大,连接数等资源用完,最终数据库拒绝连接不可用。解决的方法:缓存一个null值。使用布隆过滤器。
2024-07-06 20:14:24
1301
原创 第9章 项目总结01:项目流程,每个模块的介绍
1、确定协议定义一个接口首先确定接口的协议,Http协议及具体的方法(GET、POST、PUT、DELETE)2、请求接下来需要分析请求及响应的数据格式与内容。get 请求时,前端请求key/value串,SpringMVC采用基本数据类型(String、Integer等)或自定义类型接收。
2024-07-06 20:13:58
1242
原创 第8章 项目优化:优化需求,压力测试,缓存优化(穿透,雪崩,击穿,分布式锁)
使用缓存后代码的性能有了很大的提高,虽然性能有很大的提升但是控制台打出了很多“从数据库查询”的日志,明明判断了如果缓存存在课程信息则从缓存查询,为什么要有这么多从数据库查询的请求的?这是因为并发数高,很多线程会同时到达查询数据库代码处去执行。我们分析下代码:如果存在恶意攻击的可能,如果有大量并发去查询一个不存在的课程信息会出现什么问题呢?比如去请求/content/course/whole/181,查询181号课程,该课程并不在课程发布表中。进行压力测试发现会去请求数据库。
2024-07-06 20:13:35
767
原创 第7章 项目部署:什么是DevOps,什么是CI/CD,DevOps实战
如何来落地实现DevOps呢?DevOps兴起于2009年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了一大批优秀的工具,这些工具包括开发、测试、运维的各各领域,例如:GitHub、Docker、Jenkins、Hudson、K8S、Ant/Maven/Gradle、Selenium、QUnit、JMeter等。下图是DevOps相关的工具集:好的工具有利于DevOps的实施,但并不代表实施DevOps就一定需要去引入一堆工具。
2024-07-06 20:13:19
1458
原创 第6章 选课学习:需求分析,添加选课,支付,支付通知,在线学习
1 模块需求分析1.1 模块介绍本模块实现了学生选课、下单支付、学习的整体流程。网站的课程有免费和收费两种,对于免费课程学生选课后可直接学习,对于收费课程学生需要下单且支付成功方可选课、学习。选课:是将课程加入我的课程表的过程。我的课程表:记录我在网站学习的课程,我的课程表中有免费课程和收费课程两种,对于免费课程可直接添加到我的课程表,对于收费课程需要下单、支付成功后自动加入我的课程表。模块整体流程如下:1.2 业务流程1.2.1 学习引导用户通过搜索课程、课程推荐等信息进入课程详情页面
2024-07-06 20:13:07
1192
原创 第5章 认证授权:需求分析,Security介绍(OAuth2,JWT),用户认证,微信扫码登录,用户授权
1 模块需求分析1.1 什么是认证授权截至目前,项目已经完成了课程发布功能,课程发布后用户通过在线学习页面点播视频进行学习。如何去记录学生的学习过程呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程,如果用户要购买课程也需要知道用户的身份信息。所以,去管理学生的学习过程最基本的要实现用户的身份认证。认证授权模块实现平台所有用户的身份认证与用户授权功能。什么是用户身份认证?用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的
2024-07-06 20:12:39
2219
原创 第4章 课程发布:模块需求分析,课程预览(模板引擎 静态页面),课程审核,课程发布(分布式事务,页面静态化:熔断降级),课程搜索(es索引)
1 模块需求分析1.1 模块介绍课程信息编辑完毕即可发布课程,发布课程相当于一个确认操作,课程发布后学习者在网站可以搜索到课程,然后查看课程的详细信息,进一步选课、支付、在线学习。下边是课程编辑与发布的整体流程:为了课程内容没有违规信息、课程内容安排合理,在课程发布之前运营方会进行课程审核,审核通过后课程方可发布。作为课程制作方即教学机构,在课程发布前通过课程预览功能可以看到课程发布后的效果,哪里的课程信息存在问题方便查看,及时修改。下图是课程预览的效果图,也是课程正式发布后的课程详情界面:
2024-07-06 20:12:11
1206
原创 第3章 媒资管理:需求分析,搭建模块环境(nacos、Gateway),分布式文件系统(MinIO),上传图片,上传视频(断点传续),视频处理(FFmpeg、分布式任务处理、XXL-JOB),绑定媒资
1 模块需求分析1.1 模块介绍媒资管理系统是每个在线教育平台所必须具备的,查阅百度百科对它的定义如下:媒体资源管理(Media Asset Management,MAM)系统是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容(如视/音频资料、文本文件、图表等)进行数字化存储、管理以及应用的总体解决方案,包括数字媒体的采集、编目、管理、传输和编码转换等所有环节。其主要是满足媒体资源拥有者收集、保存、查找、编辑、发布各种信息的要求,为媒体资源的使用者提供访问内容的便捷方法,实现
2024-07-06 20:11:39
1264
原创 第2章 内容管理模块:模块需求分析,创建模块工程,课程查询(Httpclient测试、跨域),课程分类查询,新增课程(SR303校验),修改课程,查询课程计划,新增/修改计划,项目实战
1 模块需求分析1.1 什么是需求分析在百度百科中对需求分析的定义如下:需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。简单理解就是要搞清楚问题域,问题域就是用户的需求,软件要为用户解决什么问题,实现哪些业务功能,满足什么样的性能要求。如何作需求分析?第一:首先确认用户需求用户需求即用户的原始需求。通过用户访谈、问卷调查、开
2024-07-06 20:11:08
1237
原创 第1章(学成在线): 项目背景,项目介绍,环境搭建
1.项目背景1.1 在线教育市场环境以下内容摘自https://report.iresearch.cn/content/2021/01/358854.shtml在线教育行业是一个有着极强的广度和深度的行业,从校内到校外;从早幼教到职业培训;从教育工具到全信息化平台等等。2020年的新冠疫情外生冲击,让在线教育再次站在聚光灯下。疫情下教育领域获融资最多,而其中在线教育最受资本青睐。据艾瑞咨询统计,2020年教育行业累计融资1164亿元,其中在线教育融资金额1034亿元,占比89%。与此同时,在行业处于
2024-07-06 20:10:23
3110
2
原创 学成在线项目开发环境配置v3.1:开发工具版本,IDEA环境配置,Maven环境,安装虚拟机(连接MobaXterm说明),安装数据库环境,安装Git环境
说明:在虚拟机中会安装centos和docker,老师会提供一个完整的虚拟机大家使用VMware打开即可,里面的东西都安装好了。
2024-05-17 07:41:11
1634
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人