自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分享一波项目经验——使用Spring AOP实现了用户操作日志功能

今天项目完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下。需求分析系统需要对用户的操作进行记录,方便未来溯源首先想到的就是在每个方法中,去实现记录的逻辑,但是这样做肯定是不现实的,首先工作量大,其次违背了软件工程设计原则(开闭原则)这种需求显然是对代码进行增强,首先想到的是使用 SpringBoot 提供的 AOP 结合注解的方式来实现功能实现1、 需要一张记录日志的 Log 表导出的 sql 如下:-- mcams.t_log definiti.

2022-05-29 14:13:03 364

原创 原来如此,排位系统是这样给我匹配那些瓜皮队友的

我有个朋友抱怨说打排位匹配的队友太菜了,我就说我打排位觉得队友都挺行的啊?我经常躺赢。朋友意味深长地说了句:一般隐藏分比较高的玩家,排位如果排不到实力相当的队友,就会排到一些菜狗。嗯?我想了几秒钟感觉这小伙子不对劲,他意思是说我隐藏分低,还是说我就是那条菜狗?我立马要求和他开黑打一把,证明我不是菜狗,他才是菜狗。打完之后我就来发文了,虽然结果不便透露,但我对游戏的匹配机制有了一点思考。所谓「隐藏分」我不知道是不是真的,毕竟匹配机制是所有竞技类游戏的核心环节,想必非常复杂,不是简单

2022-05-29 13:45:12 425

原创 Kibana(一张图片胜过千万行日志)

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。1. 安装Kibana2. Kibana配置Configure Ki...

2022-05-23 14:25:34 301

原创 Prometheus+SpringBoot应用监控全过程(详解)

1. Prometheus是什么Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案。Prometheus主要特性:多维数据模型,其中包含由指标名称和键/值对标识的时间序列数据 PromQL,一种灵活的查询语言 不依赖分布式存储; 单服务器节点是自治的 时间序列收集通过HTTP上的pull模型进行 通过中间网关支持推送(push)时间序列 通过服务发现或静态配置发现目标 支持多种模式的图形和仪表盘为什么用pull(拉取)而不用p

2022-05-23 13:46:31 3364

原创 缓存就是万金油,哪里有问题哪里抹一下 。那他的本质是什么呢?

所有 IT 从业者都接触过缓存,一定了解基本工作原理,业界流行一句话:缓存就是万金油,哪里有问题哪里抹一下。那他的本质是什么呢?上图代表从 cpu 到底层硬盘不同层次,不同模块的运行速度,上层多加一层 cache, 就能解决下层的速度慢的问题,这里的慢是指两点:IO 慢和 cpu 重复计算缓存中间结果但是 cache 受限于成本,cache size 一般都是固定的,所以数据需要淘汰,由此引出一系列其它问题:缓存一致性、击穿、雪崩、污染等等,本文通过阅读 redis 源码,学习主流淘汰算..

2022-05-21 20:30:09 119

原创 Gitee开发者:项目被封了?大量仓库被关闭,官方答复“迫于无奈”

PART 01Gitee开发者:项目被封了5月18日,大量开发者反映自己Gitee上的开源项目,发现被关闭公开访问了。对此,Gitee的答复是:“此举也是迫于无奈,目前已经是Gitee团队能确保大家尽快正常使用的最优解,我们正在尽全力减少大家的不便,希望大家能够理解。”图片来源@知乎这一事件引发了广大开发者的讨论。有人认可Gitee的这种做法:有人对这种一刀切的做法表示不满:PART 02Gitee审核事件背后的“不得已”Gitee又名码云,是

2022-05-21 19:40:36 2200 3

原创 MySQL使用索引的正确方式你知道吗?

MySQL合理使用索引索引可以说是数据库中的一个大心脏了,如果说一个数据库少了索引,那么数据库本身存在的意义就不大了,和普通的文件没什么两样。所以说一个好的索引对数据库系统尤其重要,今天来说说MySQL索引中B+树索引好从细节和实际业务的角度看看在MySQL处,以及我们在使用索引时需要注意的知识点。一、合理利用索引在工作中,我们可能判断数据表中的一个字段是不是需要加索引的最直接办法就是:这个字段会不会经常出现在我们的where条件中。从宏观的角度来说,这样思考没有问题,但是从长远的角度来看,有时

2022-05-21 16:11:11 1425

原创 为了方便开发者更快监控多个远程主机,一个分布式 JVM 监控工具

介绍该项目为了方便开发者更快监控多个远程主机jvm,如果你的项目是Spring boot那么很方便集成,jar包引入即可,不是Spring boot也不用气馁,你可以快速自行初始化一个Spirng boot程序引入jar包即可效果展示整体架构git地址https://github.com/xk4848123/monitor https://github.com/xk4848123/monitor-server使用前提需要机器中有JDK,不仅仅是JRE,配置好jav

2022-05-21 15:48:22 122

原创 TCP协议为什么要三次握手而不是两次?

TCP协议简介TCP协议是五层协议中运输层的协议,下面依赖网络层、链路层、物理层,对于一个报文想发到另一台机器(假设是服务器)上对等层,每一个所依赖的层都会对报文进行包装,例如TCP协议就依赖网络层的IP协议,所以发送的报文会经过如下封装:当这个数据包到达服务器时,服务器的网络层会对IP相关协议内容解封装、校验,然后运输层对TCP层进行解封,解封涉及到一系列的步骤,例如这个数据包是要干嘛?是发给我的吗?这些操作需要根据TCP报文的首部信息来判断,首部包含以下内容:主要通过首部信息来了解这

2022-05-21 13:45:51 252

原创 推荐,一款MySQL管理工具:Sequel Pro

Sequel Pro 是一个 Mac 系统上简单易用的 MySQL 和 MariaDB 数据库管理系统。服务器和本地都是Mysql数据库 使用的工具:Sequel Pro(专门管理Mysql的工具) 操作系统Mac OS 10.12Sequel Pro简介Sequel Pro是一款管理Mysql的工具,界面简洁易用。Sequel 连接界面连接服务器的mysql数据库Sequel Pro提供了3种连接方式,standard/socket/ssh。我使用的是st.

2022-05-20 21:04:42 185

原创 常用的一些拓展:Spring拓展接口分门别类

Spring框架是一个拓展性很好的框架,在平时的开发中我们也会进行一些拓展。那么来看一下常用的拓展类:​编辑切换为居中添加图片注释,不超过 140 字(可选)这里把拓展接口分成了四大类 1. 导入类拓展接口​编辑添加图片注释,不超过 140 字(可选) ImportAware 从Spring的源码注释来看ImportAware接口是需要和@Import一起使用的。通过@Import导入的配置类如果实现了ImportAware接口就可以获取到导入该配置类接口的数据配置

2022-05-20 20:57:27 174

原创 最新效率测评——利用Java向Mysql插入

利用JAVA向Mysql插入一亿数量级数据—效率测评这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数据,大多模棱两可,不敢通过这些数据下定论。所以通过随机生成人的姓名、年龄、性别、电话、email、地址 ,向mysql数据库大量插入数据,便于用大量的数据测试 SQL 语句优化效率。、在生成过程中发现使用不同的方法,效率天差万别。1、先上Mysql数据库,随机生成的人员数据图。分别是ID、姓名、性.

2022-05-20 20:21:24 1493

原创 互联网技术面试,面试官问我:你做事仔细吗?

引子2015年的时候,我去58面试。因为有前同事的介绍,面试官不用问就对我各方面的能力什么的都很了解。本身那个同事级别就比较高(如果我面试通过,大概他大概是我领导的样子)。所以过程中可以看出,我去面试前级别什么的都定好了。面试就是走个过场。其中一个面试官,级别应该是我那位同事的领导。就问我:“因为咱们是做金融的,需要非常仔细,你做事仔细吗?”当时我只要回答是或者否就行了。但是现在想来,是否仔细看不是一道判断题,而是一道思考题。对仔细的意识领导这个问题听起来无关痛痒,谁遇到这种送分题不

2022-05-20 16:16:15 160

原创 服务器之间的数据如何保持一致性,还好有主从复制

大家好,我是小林哥。又来图解 Redis 啦。我在前两篇已经给大家图解了 AOF 和 RDB,这两个持久化技术保证了即使在服务器重启的情况下也不会丢失数据(或少量损失)。不过,由于数据都是存储在一台服务器上,如果出事就完犊子了,比如: 如果服务器发生了宕机,由于数据恢复是需要点时间,那么这个期间是无法服务新的请求的; 如果这台服务器的硬盘出现了故障,可能数据就都丢失了。 要避免这种单点故障,最好的办法是将数据备份到其他服务器上,让这些服务器也可以对外提供服务,这样即使有一台服

2022-05-20 14:27:39 1570

原创 怎么提高效率?SpringBoot+flowable快速实现工作流

总览使用flowable自带的flowable-ui制作流程图 使用springboot开发流程使用的接口完成流程的业务功能一、flowable-ui部署运行flowable-6.6.0 运行 官方demo参考文档:https://flowable.com/open-source/docs/bpmn/ch14-Applications/1、从官网下载flowable-6.6.0 :https://github.com/flowable/flowable-engine/relea.

2022-05-20 13:50:20 495

原创 被老板怼了一顿,就因使用雪花id或uuid作为Mysql主键

前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇文章我们就来分析这个问题,探讨一下内部的原因。一、mysql和程序实例1.要说明这个问题,我们首先来建立三张表分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key

2022-05-20 13:40:39 134

原创 不用再 new Date() 了,那我们该用什么?

Date背景众所周知,在 1995 年,Brendan(JavaScript之父) 被网景公司安排了一个巨大而紧急的工作任务,用 10 天的时间来编写 JavaScript 语言。而日期处理是几乎所有编程语言的基本部分,所以JavaScript 也必须拥有它。这是一个非常复杂的领域,但留给作者编写它的时间却很短。最终Brendan选择了借鉴当时红极一时的java语言,从java.Util.Date日期实现中复制了 Javascript 的日期对象。坦率地说,这个实现很糟糕。事实上Jav...

2022-05-19 20:52:42 956

原创 怎么解决微服务做用户认证和授权这个痛点难点

微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了。今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了。两种思路通常微服务的认证和授权思路有两种:所有的认证授权都由一个独立的用户认证授权服务器负责,它只负责发放Token,然后网关只负责转发请求到各个微服务模块,由微服务各个模块自行对Token进行校验处理。 另一种是网关不但承担了流量转发作用,还承担认证授权流程,当前请求的认证信息由网关中继给下游

2022-05-19 20:37:23 682 1

原创 1.8版本时间类在JDK中迭代三代时间类的区别

(一)概述时间类一直是代码开发中经常用到的东西,时间类在JDK中刚出现到国内最常用的1.8版本,一共迭代了三次。分别是Date类、Calendar类和LocalDateTime类。虽然JDK在更新,但是我看到很多的项目还是用着最初的Date类,这期就来讲一下三代时间类的区别。(二)Date类Date类是JDK1.0时期推出来的第一代时间类,Date类最常用的方式是对获取当前时间,并使用SimpleDateFormat对时间进行格式化,代码如下:Date date = new Date();

2022-05-19 16:06:31 451

原创 大多数的Spring Cloud微服务项目还在使用这些旧的体系,现在终于得到了解决

旧的Spring Security OAuth2停止维护已经有一段时间了,99%的Spring Cloud微服务项目还在使用这些旧的体系,严重青黄不接。很多同学都在寻找新的解决方案,甚至还有念念不忘密码模式的,别想了,已经凉透了。今天看到这篇文章的同学有福了,问题将在这里得到解决。仓库地址:https://github.com/NotFound403/id-server方案目前这应该是Spring生态中最新的解决方案,没有之一。先看下流程,微服务无关的其它的组件这里先屏蔽了,剩下图的几个组件:

2022-05-19 15:57:01 326

原创 通俗易懂小故事,你敢说还不懂Docker?

程序员受苦久矣多年前的一个夜晚,风雨大作,一个名叫Docker的年轻人来到Linux帝国拜见帝国的长老。“Linux长老,天下程序员苦于应用部署久矣,我要改变这一现状,希望长老你能帮帮我”长老回答:“哦,小小年纪,口气不小,先请入座,你有何所求,愿闻其详”Docker坐下后开始侃侃而谈:“当今天下,应用开发、测试、部署,各种库的依赖纷繁复杂,再加上版本之间的差异,经常出现在开发环境运行正常,而到测试环境和线上环境就出问题的现象,程序员们饱受此苦,是时候改变这一状况了。”

2022-05-19 14:18:54 113

原创 为什么要学习Tomcat的设计思路,对我们这些 crud 工程师有用吗?

导读为什么要学习Tomcat的设计思路,对我们这些 crud 工程师有用吗?现代背景下,我们不仅可以学到Tomcat的架构,学会从宏观上怎么去设计一个复杂系统,怎么设计顶层模块,以及模块之间关系。Tomcat总体架构Tomcat主要实现了2个核心功能:处理Socket连接,负责网络字节流与Request和Response对象的转化 加载和管理Servlet,以及具体处理Request请求因此Tomcat设计了两个核心组件:连接器(Connector):负责对外交流 容器(Conta

2022-05-19 13:42:10 320

原创 作为一名后端工程师,你知道Redis为什么这么快吗?

作为一名后端工程师,工作中你肯定和 Redis 打过交道。Redis 为什么快,这点想必你也知道,至少为了面试也做过准备。很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两可。那么今天就来一起看看:​编辑切换为居中添加图片注释,不超过 140 字(可选)- 思维导图 -基于内存实现这点在一开始就提到过了,这里再简单说说。Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程

2022-05-19 13:32:14 217

原创 使用Netty和动态代理实现一个简单的RPC

RPC(remote procedure call)远程过程调用RPC是为了在分布式应用中,两台主机的Java进程进行通信,当A主机调用B主机的方法时,过程简洁,就像是调用自己进程里的方法一样。RPC框架的职责就是,封装好底层调用的细节,客户端只要调用方法,就能够获取服务提供者的响应,方便开发者编写代码。RPC底层使用的是TCP协议,服务端和客户端和点对点通信。作用在RPC的应用场景中,客户端调用服务端的代码客户端需要有相应的api接口,将方法名、方法参数类型、具体参数等等都发送给服务端

2022-05-18 20:42:39 178

原创 Spring Cloud Alibaba 使用Seata解决分布式事务

为什么会产生分布式事务?#随着业务的快速发展,网站系统往往由单体架构逐渐演变为分布式、微服务架构,而对于数据库则由单机数据库架构向分布式数据库架构转变。此时,我们会将一个大的应用系统拆分为多个可以独立部署的应用服务,需要各个服务之间进行远程协作才能完成事务操作。在微服务项目中通常一个大项目会被拆分为N个子项目,例如用户中心服务,会员中心服务,支付中心服务等一系列微服务,在面临各种业务需求时难免会产生用户中心服务中需要调用会员中心服务,支付中心服务而产生调用链路;服务与服务之间通讯采用RPC远程调用技术,

2022-05-18 20:06:48 701

原创 我们一起来聊一聊:Spring MVC基本应用(详解)

1.1 经典三层结构在JavaEE开发中,几乎全部都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用得非常多,接下来我们详细了解下这三层架构。表现层:也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果。表现层包括展示层和控制层:控制层负责接受请求,展示层负责结果的展示。表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。表现层的设计一般都使用MVC模型。业务

2022-05-18 19:56:35 363

原创 Spring Boot中如何一键自定义starter?

Spring Boot starter我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的。品达通用权限系统就是基于Spring Boot进行开发,而且一些基础模块其本质就是starter,所以我们需要对Spring Boot的starter有一个全面深入的了解,这是我们开发品达通用权限系统的必备知识。1 starter介绍spring boot 在配置上相比spring要简单许多, 其核心在于spring-boot-

2022-05-18 15:14:58 134

原创 10年阿里人告诉你:秒杀系统设计就该这么玩

秒杀活动是指网络商家为促销等目的组织或网上限时抢购活动,这种活动具有瞬时并发量大、库存量少和业务逻辑简单等特点。设计一个秒杀系统需要考虑的因素很多,比如对现有业务的影响、网络带宽消耗以及超卖等因素。本文会讨论秒杀系统的各个环节可能存在的问题以及解决方案。秒杀系统傻瓜式秒杀系统秒杀系统的核心难点是并发量,如果不考虑并发问题,那么我们可以用如下图所示的简单的系统结构来实现秒杀系统,用户只有两个简单操作:刷新界面和秒杀按钮,服务端也只有两个服务接口:返回秒杀界面和处理秒杀逻辑。假设本文中秒杀商

2022-05-18 14:37:30 218

原创 阿里一面灵魂一问:RPC或者HTTP什么时候需要序列化和反序列化?

大家好,我是热心网友 —— 小林。有位读者问了,我这么一个问题:不管是 RPC 或者 HTTP,只要传输的内容是「对象」,要想在接收方还原出一摸一样的「对象」,那就需要序列化和反序列化。那什么是序列化和反序列化呢?RPC 能帮助我们的应用透明地完成远程调用,即调用其他服务器的函数就像调用本地方法一样。发起调用请求的那一方叫做调用方,被调用的一方叫做服务提供方。调用方和服务提供方一般是不同的服务器,所以就需要通过网络来传输数据,并且 RPC 常用于业务系统之间的数据交互,需要保

2022-05-17 20:41:35 109

原创 卷起来,微服务网关:SpringCloud Gateway保姆级入门教程

什么是微服务网关SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的:该项目借助Spring WebFlux的能力,打造了一个API网关。旨在提供一种简单而有效的方法来作为API服务的路由,并为它们提供各种增强功能,例如:安全性,监控和可伸缩性。而在真实的业务领域,我们经常用SpringCloud Gateway来做微服务网关,如果你不理解微服务网关和传统网关的区别,可以阅读此篇文章 Service Mesh和API Gateway关系深度

2022-05-17 20:25:00 653

原创 Java线程池你已经理解透彻了吗?Java线程池详解帮你分析

线程池概念说得简单明了一点,就是管理线程的一个池子,是一种基于池化思想管理线程的工具。为解决资源分配的问题,线程池采用了“池化”(Pooling)思想。池化,顾名思义,是为了最大化收益并最小化风险,而将资源统一在一起管理的一种思想。Pooling is the grouping together of resources (assets, equipment, personnel, effort, etc.) for the purposes of maximizing advantage o

2022-05-17 19:10:52 188

原创 微服务系统中,一个来自用户的请求,怎么样将它的请求过程的数据记录下来?微服务调用链日志追踪分析

一、技术原理1.1 背景微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。举个例子,在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面),然后

2022-05-17 16:42:49 1059

原创 为什么redis在陌陌上使用的这么广泛?当NoSQL数据库,微服务的注册中心,RPC的调用协议都能用

前言说到redis,可能大家的脑海中蹦出的关键词是:NoSQL、KV、高性能、缓存等。但今天的文章从另一个角度——微服务来展开。这篇文章的起因也是源自一次面试经历,在面试一位来自陌陌的候选人(就是那个交友的陌陌)时,他提到一点让我觉得很有意思,他说redis在陌陌被使用得非常广泛,除了常规的缓存外,某些场景下也当NoSQL数据库来使用,还用redis作为微服务的注册中心,甚至连RPC的调用协议都用了redis协议。注册中心最早了解到redis可以作为注册中心是从dubbo的源码中看到,但一直

2022-05-17 16:02:48 232

原创 基于 JDK 和 CGLib 如何实现动态代理,他们之间的区别和适用场景是什么呢?

在日常的开发中,Spring AOP 是一个非常常用的功能。谈到 AOP,自然离不开动态代理。那么,基于 JDK 和 CGLib 如何实现动态代理,他们之间的区别和适用场景是什么呢?接下来,我们一起来探讨一下这个问题。JDK 如何实现动态代理?话不多说,我们直接对照着代码来查看。代码示例Hello 接口public interface HelloInterface { /** * 代理的目标方法 */ void sayHello();

2022-05-17 14:10:32 426

原创 7 段小代码,玩转Java程序常见的崩溃场景。

Java程序是基于GC的,在启动初始,就申请了足量的内存池,再加上JIT等编译器的实时优化,速度并不比直接用C++语言写的慢。Java语言同时由于反射和可观测等特点,再加上JFR这种神器,在发生问题的时候比二进制文件更容易找到它的根源。最近在看RCA(Root Cause Analysis)的东西,不小心发现了yCrash这么个东西。它的几段问题小代码写的非常典型,我们可以稍微看一下,来看看Java应用程序常见的几个崩溃场景。1.堆空间溢出OOM 一般是内存泄漏引起的,表现在 GC 日志里,一般

2022-05-16 20:28:51 226

原创 RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略

消息队列常见问题处理分布式事务什么是分布式事务我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用,同时网络环境也是不稳定的,造成了我们多个机器之间的数据同步问题,这就是典型的分布式事务问题。在分布式事务中事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。分布式事务就是要保证不同节点之间的数据一致性。常见的分布式事务解决方案1、2PC(二阶段提

2022-05-16 20:12:16 216

原创 鹅厂面试题:TCP 连接,一端断电和进程崩溃有什么区别?

有位读者找我说,他在面试腾讯的时候,遇到了这么个问题:这个属于TCP 异常断开连接的场景,这部分内容在我的「图解网络」还没有详细介绍过,这次就乘着这次机会补一补。这个问题有几个关键词:没有开启 keepalive; 一直没有数据交互; 进程崩溃; 主机崩溃;我们先来认识认识什么是 TCP keepalive 呢?这东西其实就是TCP 的保活机制,它的工作原理我之前的文章写过,这里就直接贴下以前的内容。如果两端的 TCP 连接一直没有数据交互,达到了触发 TCP 保..

2022-05-16 19:48:59 112

原创 Redis 中常见的集群部署方案

Redis 的高可用集群前言这里来了解一下,Redis 中常见的集群方案几种常用的集群方案 主从集群模式 哨兵机制 切片集群(分片集群) 主从集群模式主从集群,主从库之间采用的是读写分离 主库:所有的写操作都在主库发生,然后主库同步数据到从库,同时也可以进行读操作; 从库:只负责读操作; 主库需要复制数据到从库,主从双方的数据库需要保存相同的数据,将这种情况称为"数据库状态一致"来看下如何同步之前先来了解下几个概念1、服务器的运行

2022-05-16 15:07:25 355 1

原创 为什么 Redis 的查询很快? Redis 如何保证查询的高效?

Redis 如何保证高效的查询效率为什么 Redis 比较快Redis 中的查询速度为什么那么快呢?1、因为它是内存数据库;2、归功于它的数据结构;3、Redis 中是单线程;4、Redis 中使用了多路复用。Redis 中的数据结构这里借用一张来自[Redis核心技术与实战] Redis 中数据结构和底层结构的对应图片1、简单动态字符串Redis 中并没有使用 C 中 char 来表示字符串,而是引入了 简单动态字符串(Simple Dynamic String

2022-05-16 14:08:11 373

原创 TCP 是面向字节流的协议,UDP 是面向报文的协议?这里该如何理解?

有个读者问我,这么个问题:TCP 是面向字节流的协议,UDP 是面向报文的协议?这里的「面向字节流」和「面向报文」该如何理解。#如何理解字节流?之所以会说 TCP 是面向字节流的协议,UDP 是面向报文的协议,是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同,也就是问题原因在发送方。先来说说为什么 UDP 是面向报文的协议?当用户消息通过 UDP 协议传输时,操作系统不会对消息进行拆分,在组装好 UDP 头部后就交给网络层来处理,所以发出去的 UDP 报文中的数据部分

2022-05-14 20:20:46 4332

空空如也

空空如也

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

TA关注的人

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