- 博客(167)
- 收藏
- 关注
原创 【RabbitMQ】工作队列和发布/订阅模式的具体实现
本文介绍了如何在Java中使用RabbitMQ实现工作队列模式和发布/订阅模式。首先,通过创建常量类Constants来存储连接参数,简化了连接工厂的配置。在工作队列模式中,通过创建多个消费者来处理队列中的消息,确保消息被均匀分配。发布/订阅模式则引入了Exchange角色,支持广播、定向和通配符三种路由规则。生产者代码中需要声明交换机,并指定交换机和队列之间的关系。通过示例代码展示了如何实现这两种模式,并提供了运行程序的步骤和注意事项。
2025-05-13 10:39:55
638
22
原创 【RabbitMQ】七种工作模式介绍
本文介绍了RabbitMQ的几种常见工作模式及其适用场景。简单模式适用于单一生产者和消费者之间的点对点通信。工作队列模式允许多个消费者共同处理队列中的消息,适合集群环境中的异步任务处理。发布订阅模式通过交换机将消息广播给多个消费者,适用于实时通知或广播通信。路由模式和通配符模式则根据特定的路由键或通配符规则将消息分发给不同的消费者,适合需要灵活匹配和过滤消息的场景。RPC模式通过队列实现远程调用,支持请求和响应的双向通信。发布确认模式确保消息可靠发送到服务器,适用于对数据安全性要求较高的场景。
2025-05-13 10:35:52
402
4
原创 【RabbitMQ】AMQP协议、生产者和消费者的代码编写
在释放资源之前可以让程序休眠两秒钟,等待回调函数执行完之后再释放,就可以看到打印出来的完整信息了。建立连接,需要建立一个连接工厂,然后把信息都放进去,需要连接的时候,直接就从工厂里面拿就可以了。消费者接收消息,我们也要先建立连接。此处建立连接的思路和生成者的一样。在建立好连接之后,就需要在连接里面创建一个信道,供消息传输。这里用到的方法,和创建生产者中用到的方法一样——可以直接使用内置的交换机,就不需要进行操作。接收消息的时候,需要提供一个实现了。是一个好习惯,但这不是必须的,发送消息的时候,会用到。
2025-04-16 15:25:53
877
1
原创 【RabbitMQ】核心概念和工作流程
Producer和Consumer、Connection和Channel、Virtual Host、Queue、Exchange
2025-04-14 12:36:42
938
2
原创 【redis】缓存 更新策略(定期、实时生存),缓存预热、穿透、雪崩、击穿详解
缓存的基本概念如何使用redis作为缓存缓存更新策略==>redis内存淘汰机制缓存使用的注意事项。
2025-03-29 15:35:06
1378
7
原创 【redis】集群 如何搭建集群详解
基于docker在我们云服务器上搭建出一个redis集群出来当前节点,主要是因为我们只有一个云服务器,搞分布式系统,就比较麻烦。实际工作中,一般是通过多个主机的方式,来搭建集群9docker9此处我们创建11个redis节点,其中前9个用来演示集群的搭建,后2个用来演示集群扩容一定要记得,把以前启动的redis容器给停掉。
2025-03-27 17:16:22
1476
39
原创 【redis】集群 数据分片算法:哈希求余、一致性哈希、哈希槽分区算法
广义的集群,只要你是多个机器,构成了分布式系统,都可以称为是一个“此处我们介绍的是狭义的集群,redis提供的“集群模式”,哨兵模式提高了系统的可用性。但是其本质上还是redis的主从节点存储数据。其中就要求一个主节点/从节点,就得存储整个数据的“全集”此处关键问题,就是引入多台机器,每台机器存储一部分数据不是说光引入多台机器就够了,每个存储数据的机器还需要搭配若干多个从节点。
2025-03-27 17:05:44
1303
14
原创 【redis】哨兵相关知识超详解(覆盖面试考点)
Redis的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的,于是Redis从2.8开始提供了(哨兵)加个来解决这个问题。
2025-03-26 10:00:32
976
原创 【redis】哨兵节点作用演示和重选主节点详细流程
能够在redis主从结构出现问题的时候(比如主节点挂了),此时哨兵节点就能帮我们选出一个主节点,来代替之前挂了的节点,保证整个redis仍然是可用状态查看各节点状态。
2025-03-26 09:55:50
1221
原创 【redis】哨兵:搭建主从/哨兵节点详解和细节
分为两组 `yml`,先后启动我们其实也可以用于一个 `yml` 文件,直接启动 6 个容器,但是:- 如果把这六个容器同时启动,可能是哨兵先启动完成,数据节点后启动完成,哨兵就可能会先认为是数据节点挂了- 虽然对大局不影响,但是会影响到观察执行日志的过程---
2025-03-25 21:56:29
1285
2
原创 【redis】哨兵:docker搭建redis环境,容器的编排方式
按理说,这六个节点是要要六个不同的服务器主机上。此时我们只有一个服务器,我们就在一个服务器上,来完成这里的环境搭建由于这些节点,还挺多的,相互之间容易大家,依赖的端口号/配置文件/数据文件… 如果我们直接部署,就需要小心翼翼的去避免这些冲突。
2025-03-25 21:52:19
761
1
原创 【redis】哨兵:人工恢复主节点故障和哨兵自动恢复主节点故障
Redis的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的,于是Redis从2.8开始提供了(哨兵)加个来解决这个问题。
2025-03-24 22:35:10
1147
4
原创 【redis】主从复制:全量复制、部分复制、实时复制详解
主从复制解决的问题单点问题单个redis节点,可用性不高单个redis节点,性能有限主从复制的特点redis通过复制功能实现主节点的多个副本主节点用来写,从节点用来读,这样做可以降低主节点的访问压力复制支持多种拓扑结构,可以在适当的场景选择合适的拓扑结构复制分为全量复制,部分复制和实施复制主从节点之间通过心跳机制保证主从节点通信正常和数据一致性主从复制配置的过程主节点配置不需要改动从节点再配置文件中加入slaveof 主节点ip 主节点端口号的形式即可主从复制的缺点。
2025-03-23 19:08:14
798
3
原创 【redis】主从复制:拓扑结构、原理和psync命令解析
和offset共同描述了一个“数据集合如果发现两个机器,一样,offset也一样,就可以认为这两个redis机器上存储的数据就是完全一样的主服务器看做银行总行,从服务器看做分行总行里面有很多客户,每个客户都有一个自己的账户,用表示账户,offset表示订单数量比如张三的账户是123123,他此时转出 100 元,总行实时记录,订单数量offset为 1,随后同步给分行只要总行和分行里面,账户号和订单数量offset一样,就说明两边的数据是一样的,如果分行的订单数量offset。
2025-03-23 19:06:45
1235
29
原创 【redis】主从复制:单点问题、配置详解、特点详解
在分布式系统中,往往希望有多个服务器来部署redis服务器,从而构成一个redis集群。此时就可以让这个集群给整个分布式系统重其他的服务,提供更稳定/更高效的数据存储功能在分布式系统重,希望使用多个服务器来部署redis,存在以下几种redis主从模式主从+哨兵模式集群模式在若干个redis节点中,有的是“主节点”,有的是“从节点”。假设有三个物理服务器(称为三个节点),分别部署了一个进程此时就可以把其中的一个节点,作为“主节点”,另外两个节点作为“从节点”。
2025-03-23 16:47:32
1172
9
原创 【redis】事务详解,相关命令multi、exec、discard 与 watch 的原理
事务的原子性、一致性、持久性、隔离性。与MySQL对比的优势和。事务的用处。事务的相关命令,multi、exec、discard、watch。watch的使用方法和实现原理
2025-03-22 17:41:19
1520
30
原创 【多线程】线程安全集合类,ConcurrentHashMap实现原理
ArrayListQueueHsahMap… 都是线程不安全的VectorStackHashtable都是线程安全的(内置了 synchronized),实际上这几个东西并。
2025-03-21 17:15:16
1400
18
原创 【redis】AOF 基本工作原理、工作流程、文件同步、重写机制详解
RDB最大的问题,就是不能实时的持久化保存数据,在两次生成快照之间,实时的数据可能会随着重启而丢失。
2025-03-20 22:39:15
1413
2
原创 【redis】AOF 的基本工作机制,顺序写入,文件同步,重写机制
RDB最大的问题,就是不能实时的持久化保存数据,在两次生成快照之间,实时的数据可能会随着重启而丢失。
2025-03-20 20:50:25
818
原创 【redis】什么是持久化之 RDB
持久化的视线策略RDB,RDB的实现原理,手动触发保存、自动触发保存,save、bgsave,配置文件设置,RDB检查工具,RDB文件
2025-03-18 14:50:30
1142
原创 【redis】在 Spring中操作 Redis
的方法,分成了几个类别,分门别类的来组织的。启动服务器之后,在浏览器上输入对应的路径。留了一个后手,让我们随时能够执行到。此处提供的一些接口风格,和原生的。对象里的各种方法来操作。命令就有一定的差异了。
2025-03-18 14:47:17
500
原创 【redis】Jedis 操作 Redis 基础指令(下)
Jedis这个库的本质就是针对redis的各种命令进行封装。调用某个方法,就相当于在redis客户端中敲下了对应的命令。
2025-03-17 12:28:20
943
7
原创 【redis】Jedis 操作 Redis 基础指令(上)
jedis进行redis中的一些通用命令redis一个优秀的库,一定是非常容易上手的。
2025-03-17 12:27:26
516
1
原创 【redis】reids 客户端的连接(Windows和mac)
Redis服务器,在官网公开了使用的协议——RESP。任何一个第三方库都可以通过上述协议,来实现出一个和Redis服务器通信的客户端程序RedisJava生态中,封装了RESP协议,实现的Redis客户端是有很多的。我们这里使用的是jedis(这里提供的API和Redis命令高度一致)jedismaven</</</</
2025-03-16 09:29:46
2349
35
原创 【redis】渐进式遍历(scan)和数据库数据库管理
虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑。这里的渐进式遍历,在遍历过程中,不会在服务器这边存储任何的状态信息。很少会关注到数据库,一般都是默认就用 0 号就可以了。这里的数字,不是每次遍历都得设置成一样。”,就可以做到,既能够获取到所有的。指到 0 了,就代表遍历完了。中有一个重要的概念——这样的概念的,只不过不想。,同时又不会卡死服务器。
2025-03-16 09:27:29
1096
原创 【redis】zset 类型:基本命令(下)
如果有序集合中的元素个数较少,或者单个元素体积较小,使用 `ziplist` 来存储- 在 `reids 6.0` 中,`ziplist` 变成了 `listpack`- `ziplist` 和 `listpack` 都是压缩的数据结构,但是 `listpack` 相比 `ziplist` 更加高效,提供了更好的内存利用和访问性能。它可以动态地存储多种类型的数据,而且在**存储小的元素**时,能够比 `ziplist` 更加节省内存。
2025-03-15 02:00:00
657
2
原创 【redis】streams、geospatial、HyperLogLog、bitmaps、bitfields类型
可以理解成一串二进制序列(字节数组),同时可以吧这个字节数组中的某几个位赋予特定的含义,并且可以进行读取/修改/算术运算相关操作。”,从而在新增元素的时候,能够知道当前新增的元素,是一个已经存在的元素,还是一个第一次出现的元素。存储一些点之后,就可以让用户给定一个坐标,去从刚才存储的点里进行查找(按照半径,矩形区域…,有事件产生了,我们就把这个事件当做一个元素,插入到这个。存储元素的时候,提前特征的过程是不可逆的(信息量丢失了)虽然更省空间,但是它只计数,不存储元素内容,而。有一个应用场景,统计服务器的。
2025-03-15 02:00:00
1098
13
原创 【redis】zset 类型:基本命令(上)
集合:排序的规则是什么? 中的 仍然要求是唯一的, 可以重复 主要还是用来存 的, 只是辅助,进行排序使用 往有序集合中,添加元素语法:时间复杂度:O(logN)O(logN)O(logN),NNN 为有序集合中的元素个数添加的时候,既要添加元素,又要添加分数。 和 称为是一个“”不要把 和 理解成“键值对”( )。键值对中,是有明确的“角色区分”,谁是键,谁是值,是明确的,一定是根据键找到值:只会更新已经存在的元素,不会添加新元素:只能添加新元素,不会更新已经存在的元
2025-03-14 21:13:01
950
2
原创 【redis】set 类型:基本命令
谈到一个属于,这个术语可能有多种含义,setget集合就是把一些有关联的数据放到一起集合中的元素是无序的(和前面list的有序是对应的)list集合中的元素是不能重复的(唯一的)和list类似,集合中的每个元素,也都是string类型(可以使用JSON这样的格式让string也能存储结构化数据)
2025-03-14 21:10:15
558
原创 【redis】list类型:基本命令(下)
也相当于阻塞队列一样,线程安全是通过单线程模型支持的。阻塞,则只支持“队列为空”的情况,不考虑“队列满”命令中如果设置了多个键,那么会从左向右进行遍历键,一旦有一个键对应的列表中可以弹出元素,命令立即返回。当前这俩命令虽然可以一定程度的满足“消息队列”这样的需求,但整体来说,这俩功能还是比较有限。相当于是链表和压缩列表的结合,整体还是一个链表,链表的每个节点,是一个压缩列表。:当前的线程不走了,代码不继续执行了。之间区间内的元素,区间外元素就直接被删除了。,则最先执行命令的客户端会得到弹出的元素。
2025-03-13 14:31:48
855
8
原创 【redis】hash 类型应用场景
表示对象的每个属性(数据表的每个列),此时就可以非常方便的修改/获取任何一个属性的值了。到目前位置,我们能够使用三种方法缓存用户信息,还有一种。也是可以作为缓存使用的。存储结构化数据,使用。更直观高效,但是付出的是空间的代价。——使用字符串类型,每个属性一个键。我们在写代码/管理数据,更追求的是。类型也能做到,就是需要使用。都读出来,解析成对象,操作。万一只想获取其中的某个。的时候,就需要把整个。
2025-03-12 13:02:31
441
5
原创 【redis】hash基本命令和内部编码
Redis自身已经是键值对结构了Redis自身的键值对就是通过的方式来组织的把key这一层组织完成之后,到了value这一层,value这一层也可以是Rediskey-valuevaluefieldvalue。
2025-03-12 13:01:32
1740
40
原创 【redis】string应用场景:共享会话和手机验证码
如果每个应用服务器,维护自己的会话数据,此时彼此之间胡共享,用户请求访问到不同的服务器上,就可能会出现一些不能正确处理的情况了为了解决这个问题,可以使用Redis将用户的Session信息进行几种管理,在这种模式下,只要保证Redis是最高可用和可扩展性的,无论用户被均衡到哪台Web服务器上,都集中从Redis中查询、更新Session信息!
2025-03-11 11:45:10
429
4
原创 【redis】string应用场景:缓存功能和计数功能
应用服务器访问数据的时候,先查询RedisRedisRedisRedisMySQLRedisRedis这样的缓存,经常用来存储“”数据(高频被使用的数据)刚才上述描述的过程,相当于是把最近使用到的数据作为热点数据。
2025-03-11 11:44:05
1188
14
原创 【redis】string类型相关操作:SET、GET、MSET、MGET、SETNX、SETEX、PSETEX
Redis所有的key都是字符串,value的类型是存在差异的。
2025-03-10 13:14:28
1073
1
原创 【redis】redis的单线程模型为什么效率高?
Redis 只使用一个线程,处理所有的命令请求。不是说一个 Redis 服务器进程内部只有一个线程,其实也有多个线程,多个线程是在处理。最开始介绍 TCP 服务器的时候,有一个版本就是每个客户端都分配一个线程==>客户端多了,线程就多了,系统开销就大了。当前这两个客户端,也相当于“并发”的发起了上述的请求,此时是否就意味着服务器这边也会存在类似的线程安全问题呢?如果这三件事都是交互特别频繁的,还是老老实实多搞几个线程靠谱,一个线程容易忙不过来。比如你今晚,你想吃烧烤,你妈想吃饺子,你爸想吃炒菜。
2025-03-10 13:12:37
878
原创 【redis】五种数据类型和编码方式
JavaStringJavaHashMapJavaListJavaSetmemberscoreRedis 底层在实现上述数据结构的时候,会在源码层面,针对上述实现进行特定优化,来达到节省时间/节省空间的效果RedisO1hash。
2025-03-09 11:06:20
1054
3
原创 【redis】type命令和定时器的两种实现方式(优先级队列、时间轮)
此处Redis所有的key都是string,但是key对应的value可能会存在多种类型nonekeystringlistsetzsethashstreamvalue在Redis中,上述操作方式差别很大,使用的命令都是完全不同的。
2025-03-09 11:04:19
386
12
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人