- 博客(66)
- 收藏
- 关注
原创 RabbitMQ的应用问题
是数学和计算机科学中某些运算的性质, 它们可以被多次应⽤, ⽽不会改变初始应⽤的结果。在应⽤程序中, 幂等性就是指对⼀个系统进⾏重复调⽤(相同参数),⽐如数据库的 select 操作. 不同时间两次查询的结果可能不同, 但是这个操作是符合幂等性的.. 查询操作对数据资源本⾝不会产⽣影响, 之所以结果不同, 可能是因为两次查询之间有其他操作对资源进⾏了修改。MQ的幂等性:对于MQ而言, 幂等性是指⼀般消息中间件的分为三个层级.1. At most once:最多⼀次。
2025-04-02 19:05:00
919
原创 RabbitMQ的运维
Raft 是⼀种⽤于管理和维护分布式系统⼀致性的协议,它是⼀种共识算法, 旨在实现⾼可⽤性和数据的持久性。Raft 通过在节点间复制数据来保证分布式系统中的⼀致性,即使在节点故障的情况下也能保证数据不会丢失。共识算法(Consensus Algorithm)允许多个分布式节点就某个值或⼀系列值达成⼀致性协议. 即使在⼀些节点发⽣故障,⽹络分区或其他问题的情况下, 共识算法也能保证系统的⼀致性和数据的可靠性。Raft 使⽤ Quorum 机制来实现共识和容错, 我们将对 Raft 集群的操作必须得到。
2025-03-28 15:20:20
998
原创 RabbitMQ的高级特性(三)
延迟队列是⼀个特殊的队列, 消息发送之后, 并不⽴即给消费者, ⽽是等待特定的时间, 才发送给消费者。延迟队列的应⽤场景有很多, 比如:1. 订单在⼗分钟内未⽀付⾃动取消2. ⽤⼾注册成功后, 3天后发调查问卷3. ⽤⼾发起退款, 24⼩时后商家未处理, 则默认同意, ⾃动退款但RabbitMQ本⾝并没直接实现延迟队列, 通常有两种⽅法:1. TTL+死信队列组合的⽅式2. 使⽤官⽅提供的延迟插件实现延迟功能。
2025-03-26 14:26:09
926
原创 RabbitMQ的高级特性介绍(二)
当消息的⽣产者将消息发送出去之后,消息到底有没有正确地到达服务器呢?如果在消息到达服务器之前已经丢失(比如RabbitMQ重启, 那么RabbitMQ重启期间⽣产者消息投递失败), 持久化操作也解决不了这个问题,因为消息根本没有到达服务器,何谈持久化?RabbitMQ为我们提供了两种解决⽅案:a. 通过实现b. 通过publisher confirm) 机制实现事务机制⽐较消耗性能, 在实际⼯作中使⽤也不多,咱们主要介绍confirm机制来实现发送⽅的确认。
2025-03-24 15:58:52
892
原创 关于redis的集群(下)
使⽤客⼾端连上集群中的任何⼀个节点, 都相当于连上了整个集群。客⼾端后⾯要加上 -c 选项, 否则如果 key 没有落到当前节点上,是不能操作的。-c 会⾃动把请求重定向到对应节点。添加-c选项之后,redis客户端就会根据当前key实际算出来的槽位号,自动找到匹配的分片主机。使⽤可以查看到整个集群的情况。
2025-03-21 14:19:06
570
原创 RabbitMQ的高级特性介绍(一)
⽣产者发送消息之后, 到达消费端之后, 可能会有以下情况:a. 消息处理成功b. 消息处理异常RabbitMQ向消费者发送消息之后, 就会把这条消息删掉, 那么第二种情况, 就会造成。那么如何确保消费端已经成功接收了, 并正确处理了呢?为了保证消息从队列可靠地到达消费者, RabbitMQ提供了。:RabbitMQ 会自动把发送出去的消息置为确认, 然后从内存(或者磁盘)中删除, 而⾃动确认模式适合对于消息可靠性要求不⾼的场景。
2025-03-20 19:28:27
890
原创 关于redis中的分布式锁
初始情况下,设置一个过期时间(比如1s)就提前在还剩300ms(不一定,可以灵活调整)的时候,如果当前任务还没执行完,就把过期时间再续1s。比如设置key的过期时间为1000ms,那么意味着即使出现极端情况,某个服务器挂了,没有正确释放锁,这个锁最多保持1000ms,也就会自动释放了。进行加锁,就是把key设置到主节点上,如果主节点挂了,有哨兵自动的把从节点升级成主节点,进一步的保证刚才的锁仍然可用。多个线程并发执行的时候,执行的先后顺序是不确定的,需要保证程序在任意执行顺序下,执行逻辑都是ok的。
2025-03-19 18:17:25
681
原创 redis的典型应用 --缓存
Redis最主要的用途,分为三个方面:1.(内存数据库)2.(最常用)3.是计算机中的⼀个经典的概念。核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅,方便随时读取。
2025-03-18 19:00:32
755
原创 关于Redis的集群(上)
如果槽位更多,就需要消耗更大的空间,更大的网络带宽。此时就可以针对要插入的数据的key(redis都是键值对结构的数据)计算hash值。而且, 16000 这么⼤规模的集群, 本⾝的可用性也是⼀个⼤问题. ⼀个系统越复杂, 出现故障的概率是越⾼的。随着业务的增长,数据变多了,需要更多的分片。两个原字符串,哪怕大部分都相同,只有一个小的地方不同,算出来的md5值也会差别很大。当引入更多的分片的时候,N(分片数量)就改变了。一共9个节点,设置了之后,redis就知道了3个节点是一伙的(一个分片)。
2025-03-17 13:45:01
804
原创 关于软件测试中的bug
⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault),这些bug使程序⽆法正确的运⾏。Bug产⽣于程序的源代码或者程序设计阶段的疏忽或者错误。
2025-03-05 21:04:02
936
原创 关于Redis的哨兵机制
• Redis 主节点如果宕机, 哨兵会把其中的⼀个从节点, 提拔成主节点。• 当之前的 Redis 主节点重启之后, 这个主节点被加⼊到哨兵的监控中, 但是只会被作为从节点使⽤。
2025-03-04 13:14:59
1086
原创 关于redis的主从复制(下)
psync可以从主节点获取全量数据,也可以获取一部分数据。主要就是看offset的进度,如果offset写作-1,就是获取。offset写具体的正整数,则是从当前来进行获取。获取所有数据,是最稳妥的,但是会比较低效。如果从节点之前已经从主节点这里复制过一部分数据了,就只需要把新的之前没复制过的数据搞过来即可。不是从节点索要那部分,主节点就一定给那部分。主节点会自行判定,看当前是否方便给部分数据,不方便就只能给全量了。
2025-02-19 18:37:41
961
原创 关于Redis的主从复制(上)
主从模式在分布式系统中,往往希望有多个服务器来部署redis服务,从而构成一个。此时就可以让这个集群给整个分布式系统中的其他的服务,提供更稳定/更高效的数据存储功能。在分布式系统中,希望使用多个服务器来部署redis,存在以下几种redis的部署方式:1、主从模式2、主从+哨兵模式3、集群模式主从模式在若干个redis节点中,有的是,有的是。假设有三个物理服务器(称为三个节点),分别部署了一个redis-server进程。此时就可以把其中的一个节点,作为“”,另外两个节点作为“
2025-02-15 17:39:14
952
原创 关于Redis的事务
把多个操作,打包成一个整体了。张三给李四转钱,李四没收到,张三就不能扣钱。:事务执行之前和之后,数据能对得上。张三有1000,给李四转500,最终结果必须是李四500,张三500。:事务中做出的修改都会存硬盘。:事务并发执行,涉及到的一些问题。与MySQL的事务相比,Redis的事务同样是将多个操作打包在一起。:Redis的原子性也是把多个操作打包到一起,要么全部执行,要么全部不执行。。如果事务中的若干个操作,存在有失败的,那就只能失败,没有。但是MySQL的事务中如果有操作执行失败,要进行。
2025-02-10 17:02:32
709
原创 关于Redis的持久化
Redis虽然是一个内存数据库,但是也是可以将数据存储到硬盘中的,也就是。硬盘的数据是在Redis重启的时候,用来恢复内存中的数据的,即对数据做了一个备份。Redis实现持久化具体是按照和两种策略来实现的。当同时开启RDB和AOF的时候,以为主。
2025-02-07 17:03:10
745
原创 redis中的zset类型及其常用命令
有序集合相对于字符串、列表、哈希、集合来说会有⼀些陌⽣。它保留了集合的特点,但与集合不同的是,有序集合中的每个元素都有⼀个唯⼀的浮点类型的与之关联,这使得有序集合中的元素是可以维护的,但这个有序不是⽤下标作为排序依据⽽是⽤这个分数。member和score称为是一个"分数不同,按照分数来排。分数相同,按照元素自身字符串的来排列。。
2024-11-22 18:23:11
1277
原创 redis中的set类型及常用命令
集合就是把一些有关联的数据放到一起。与list不同的是,集合中的顺序不重要,。集合中的元素是的。和list类似,集合中的每个元素,也都是string类型。
2024-11-21 12:19:43
1057
原创 Redis中的list数据类型及常用命令
列表类型是⽤来存储多个有序的字符串。约定最左侧元素下标是0,redis支持负数下标。列表中的元素是的。
2024-11-20 11:54:00
1001
原创 Redis中的hash类型及相关命令
在 Redis 中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如 key = "key",value = { {哈希类型中的映射关系通常称为,⽤于区分 Redis 整体的键值对(key-value),注意这⾥的 value 是指对应的值,不是键(key)对应的值。
2024-11-19 10:58:52
933
原创 Redis中的String数据类型及相关命令
redis虽然是单线程模型,为什么效率还这么高?速度这么快呢?原因:1、主要访问则是主要访问。2、redis的核心功能,比数据库的。数据库对于数据的CRUD,都有更复杂的功能支持。这样的功能势必要花费更多的开销。3、redis采取了,避免了一些不必要的线程竞争开销。redis的每个基本操作,都是短平快的,不会特别消耗cpu资源。4、redis在处理网络IO的时候,使用了epoll这样的。。针对TCP来说,服务器这边每次要服务一个客户端,都要给这个客户端安排一个socket。
2024-11-18 11:22:43
1177
原创 软件开发的各类模型
前期阶段未发现的错误会扩散到后面的阶段,而在后面阶段发现这些错误时,可能已经很难回头修正,从而导致项目的失败。:明确的标注了测试过程中存在不同类型的测试,并且清楚地描述了这些测试阶段和开发过程中期间各阶段的对应关系,有效提升测试的质量和效率。:将需求细化成一个个任务,团队成员各司其职领取任务并进行技术设计,包括进行架构设计,接口设计,采用的技术等。:项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,每个任务都有明确的负责人,并完成工时的初估计。完成每一次迭代的目标,交付产品。
2024-11-12 21:01:10
1071
原创 关于Websocket
Websocket是一个“协议”,和HTTP地位是对等的。都是实现的一个广泛被使用的应用层协议。这个协议可以实现这样的功能。
2024-11-04 21:10:15
1042
原创 RabbitMQ的各类工作模式介绍
P:, 也就是要发送消息的程序C:,消息的接收者Queue:, 图中⻩⾊背景部分. 类似⼀个邮箱, 可以缓存消息;⽣产者向其中投递消息, 消费者从其中取出消息.: ⼀个⽣产者P,⼀个消费者C, 消息只能被消费⼀次. 也称为点对点(Point-to-Point)模式.: 消息只能被单个消费者处理。
2024-09-28 20:57:54
1242
原创 RabbitMQ快速入门
MQ( Message queue ), 从字⾯意思上看, 本质是个队列, FIFO 先入先出,只不过队列中存放的内容是消息(message) ⽽已. 消息可以⾮常简单,⽐如只包含⽂本字符串, JSON等,也可以很复杂, 比如内嵌对象.MQ主要⼯作是接收并转发消息, 在不同的应⽤场景下可以展现不同的作⽤:1.异步解耦: 在业务流程中, ⼀些操作可能⾮常耗时, 但并不需要即时返回结果. 可以借助MQ把这些操作异步化,
2024-09-27 16:02:04
1046
原创 Redis的基础通用命令
Redis是一个在内存中存储数据的中间件,可用于作为数据库,也可作为数据缓存。适用于分布式系统。Redis的一些特性:1、主要通过“键值对”的方式存储数据,是一种“非关系型”数据库。2、可编程的:针对Redis的操作,可以直接通过简单的交互式命令进行操作。也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)。3、拓展性:可以在Redis原有的基础功能上再进行拓展。Redis提供了一组API,可以通过C,C++等语言编写Redis拓展。4、持久化。
2024-09-26 19:15:41
1003
原创 浅谈分布式系统
单机架构就是,这台服务器负责所有的工作。初期,在用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。当前绝大部分公司的产品,都是这种单机架构。
2024-09-23 16:40:08
889
原创 Mybatis的XML实现方法
使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。
2024-09-21 17:00:22
679
原创 Spring中存储Bean的常见注解
目录IoC & DIIOC(控制反转)详解依赖注入的三种方式IoC& DIIoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器.控制反转:也就是控制权反转. 什么的控制权发⽣了反转? 获得依赖对象的过程被反转了也就是说, 当需要某个对象时, 传统开发模式中需要⾃⼰通过 new 创建对象, 现在不需要再进⾏创建, 把创建对象的任务交给容器, 程序中只需要依赖注⼊ (Dependency Injecti
2024-09-19 20:28:04
799
原创 SpringMVC中的常用注解
是基于 Servlet API 构建的原始Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为SpringMVC。什么是MVC?MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型视图和控制器三个基本部分.•View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.•Mode。
2024-07-25 16:07:40
897
原创 CSS选择器的常见用法
CSS能够对⽹⻚中元素位置的排版进⾏像素级精确控制,实现美化⻚⾯的效果。以上三个标签选择器 ul li a 中的任意,都可以替换成类选择器,或者id选择器,可以是任。如果需要选择多种标签,可以使⽤ , 分割,如p, div { } 表⽰同时选中p标签和div标签。逗号前后可以是以上任意选择器,也可以是选择器的组合。意选择器的组合,也可以是任意数量选择器的组合。选中了元素,才可以设置元素的属性。以上,关于CSS,希望对你有所帮助。本文总结CSS的选择器的常见用法。不⼀定是相邻的标签,也可以是"
2024-06-02 21:02:55
512
原创 JVM的垃圾回收机制--GC
垃圾回收机制,是java提供的对于内存自动回收的机制。java不需要像C/C++那样手动free()释放内存空间,而是在JVM中封装好了。垃圾回收机制,不是java独创的,现在应该是主流编程语言的标配。GC需要消耗额外的系统资源,而且存在非常影响执行效率的“”问题(触发GC的时候,可能一瞬间把系统负载拉满,导致服务器无法响应其他的请求)。GC回收的“内存”,更准确说,是“对象”,回收的是“(不需要额外回收,线程销毁,自然回收了)(不需要额外回收,线程销毁,自然回收了)
2024-05-29 10:36:07
857
原创 JVM的相关知识
也想交给自己的父亲来处理,但是它的parent指向null,只能自己处理,BootstrapClassLoader尝试在标准库的路径中搜索上述类。如果这个类,在标准库中找到了,于是搜索过程就完成了,类加载器负责打开文件,读取文件等后续操作就行了。如果找到了,也是由当前的类加载器负责处理。比如你自己代码里写了一个类,类的名字和标准库/拓展库冲突了,JVM会确保加载的类是标准库的类(就不加载你自己写的类了)。此时类对象就加载完成了,后续代码就可以使用这个类对象,创建实例,或者使用里面的静态成员了。
2024-05-28 11:47:46
1743
原创 HTTP响应的基本概念
公证机构,生成一对非对称密钥pub(公证),pri(公证),拿着pri(公证)针对证书数据的校验和进行加密,得到了数字签名。如果使用302作为重定向,临时重定向,旧地址是否要重定向,以及重定向到哪里,就是可变的。公证机构一共没多少,一个操作系统就可以在发布的时候,把市面上的公证机构的公钥都打包放在一起。注:获取公证机构的公钥,不是通过“网络”的方式获取到的。相等就说明整个证书都是没有被篡改过的,证书中包含的公钥就是可信的服务器公钥了。访问某个地址的时候,访问的是旧地址,自动跳转到新的地址上。
2024-05-25 19:55:10
1832
2
原创 HTTP协议请求报头(header)
HTTP报头(header)的结构是“”结构,每个键值对占一行,键和值之间使用分号分隔。报头的种类有很多,本次介绍几个重要的。表示请求对应的ip和端口。:表示body中的数据长度。:表示body中的数据类型。一个请求,可能有body,也可能没有。如果有body,上述两个字段,必须存在。如果没有body,上述两个字段,就不存在。POST请求有body,通过空行找到body开始,通过Content-Length找到body的结束位置。解决粘包问题。
2024-05-24 17:53:53
1127
原创 HTTP协议相关知识
url的query string中提供了 urlencode机制,二进制数据,也是可以进行encode,得到转义,并进行传输。虽然POST可以直接传二进制,很多时候,也是转义了之后通过文本的方式来传的。比如,web服务器(网站),就可能会包含很多不同的网页,就可以通过这里的路径区分不同的网页了。比如,要执行“支付10块”操作,假设账户余额是100,支付操作就期望支付之后,余额90。HTTP标准中,明确说了一句话,针对GET的url的长度是不做任何限制的。的端口,是目的端口,是服务器自己决定的。
2024-05-22 12:33:04
580
原创 数据链路层相关知识
根域名服务器是其他镜像服务器的源头。就需要把你的域名和ip的映射,提交到根域名服务器这边,然后其他的镜像就会从根域名这里同步数据。在数据传输的过程中,先根据目的ip,确定接下来往哪走,知道下一跳的ip(查路由表),根据下一跳的ip,查转发表,知道ip对应的mac/端口是哪个。当你的电脑尝试访问某个域名,得到ip,就会把ip与域名的对应关系,存储到客户端缓存之中。,把这样的映射关系,使用DNS服务器来保存,个人电脑上就不需要保存文件了,如果要访问域名,就可以通过访问DNS服务器,查询到对应的ip地址了。
2024-05-20 17:39:50
573
原创 IP协议的相关特性
对于路由器来说,在转发数据的时候,很可能无法一下知道目的ip所对应的设备如何到达,只能通过“IP协议是工作在网络层的重要协议,通过不同IP地址的选择,主要解决广域网中主机与主机之间的通信。的功能,如果携带的数据,超出长度上限,ip就会自动拆分成多个数据包,每个数据包携带一部分数据,发送到对方之后,再拼接好。每个路由器,虽然无法感知到整个网络结构的全貌,但是可以认识到它周围的网络设备,路由器中,会维护一个数据结构,“,会记录当前这个请求相对应的是哪个内网中的设备,从而把目的ip替换回最初的内网ip。
2024-05-19 17:35:27
789
原创 TCP的滑动窗口机制和流量控制
接下来,当然要继续等待2001-5000的ack,与此同时,也发送一个新的数据,5001-6000。在滑动窗口中,收到的ack不一定是按照发送顺序返回的,有可能1001-2000和2001-3000的数据先发,但是3001-4000的数据的ack先返回了,这样该怎么办?接收方给发送方返回ack,把这个数值告诉发送方,在ack报文中,在tcp报头里,指定一个字段,表示上述的空闲空间大小。滑动窗口中,批量发送4组数据之后,不是等到4个都回来才继续发送新的数据,而是收到一个ack,就往后发一个新的。
2024-05-14 19:20:45
763
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人