RabbitMQ RabbiMQ是AMQP(高级消息队列协议)的消息中间件的一种,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。Redis队列 redis队列是一个是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Valu            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-13 15:50:33
                            
                                132阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            消息队列用途:解耦,异步,消峰。 redis实现消息队列的方式:使用List作为key。(先进先出) 实现方法:①lpush,rpop 非阻塞式 ②lpush,brpop 阻塞式 注:柱塞式队列–当队列为空/满时,无法从队列中删除/增加元素。(所谓阻塞:在某种情况下,线程被挂起,直到触发满足条件自动唤醒线程)语法样式1:(实现优先级消息队列) redis 192.168.8.123>brpo            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-25 11:57:49
                            
                                109阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis用双链表list实现队列的LPUSH key value [value ...] 将一个或多个值 value 插入到列表 key 的表头 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-07 13:10:59
                            
                                34阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            重复消费问题:为了解决消费端因为种种原因而造成的消息丢失问题,我们都知道根源在于因为RabbitMQ的自动ack机制,所以为了避免以上问题,我们会选中手动ack,以确保消息不会因为某些原因而丢失。但随之而来的也有一个问题:如果忘记ack,或者又因为种种原因消费者端没能给RabbitMQ对应ack,无法确认消息已经被消费完了,那这条未被“约束”的消息也许就会被另一个消费者消费,就会造成重复消费问题如            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-15 15:47:52
                            
                                122阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            首先找到第一个切入口,redis的列表类型有两个命令LPUSH和RPOP,LPUSH命令可以让元素从左侧进入队列,RPOP命令可以让元素从右侧弹出。这样两个命令配合使用就形成了左边进,右边出的形式,间接实现了队列的功能。生产者通过LPUSH命令添加任务到某个键中,消费者通过RPOP命令不断从该键中取出任务。这时候问题来了,消费者怎么知道啥时有任务?消费者只能不断循环的读取键对应的队列,如果有任务就            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-08 15:11:51
                            
                                107阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            事务Redis 通过 WATCH、MULTI、EXEC、DISCARD 命令实现事务功能。使用命令队列(FIFO)保存客户端发送的命令,并一次性、按顺序地执行队列里的命令,知道执行完毕。例如:// 开始事务
redis> multi
OK
// 命令入队
redis> set name "傅园慧"
QUEUED
// 命令入队
redis> set age 20
QUEUED            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-04 19:30:14
                            
                                171阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、Redis1、简介Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。2、优势性能极高 –            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-15 10:23:43
                            
                                50阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1、优势:松耦合  
                易于扩展 ,消费者可以扩展多个,分布在不同的服务器中    2、LPUSH RPOP    3、BRPOP命令和RPOP相似,唯一区别:当列表中没有元素时,BRPOP命令会一直阻塞住链接,知道有新元素加入    4、BRPOP key timeout &n            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-21 23:43:32
                            
                                86阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            (一)任务对立的好处 1.公耦合,生产者和消费者无需知道批次实现的细节,只需要决定好任务的描述格式,    这使得生产者和消费则都不同额 团队使用不同的语言编写。 2.已于扩展:消费者可以有多个,而且分布在不同的机器上,可以轻易的降低单台服务器的负载。(二)使用redis实现简单的任务队列(生产者消费者模型) 生产者命令:LPUSH key alue[....] RP            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-15 16:13:39
                            
                                64阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            延迟队列的应用场景也很常见,例如:session的超时过期、自动取消未付款订单等等。redis中有一种数据结构叫做zset,即有序集合。元素类型为String类型,且元素具有唯一性不能重复,每个元素可附带float类型的score即分值。从zset中获取元素的时候可以通过分值进行排序后获取某个分值范围内的元素或所有元素。public class DelayQueue {
    private            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-01 15:24:21
                            
                                126阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            现在用的消息队列主要有kafka,rabbitmq和redis。相比另外两个,用redis做消息队列的优点是吞吐量高,延迟低,简单易用,易于部署和运维。缺点是没有ACK机制,可靠性方面不足。  本次用swoole + redis 来模拟个消息推送系统。思路1. 某个业务调用消息接口,将内容和对应的uid存入redis列表中,key为msg。 2. 用户连接swoole后,会有个fd来标识这个会话,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-01 14:33:16
                            
                                138阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、消息队列的三个要求消息有序执行(有序性);由于网络阻塞等原因,消息不会被重复执行(幂等性);宕机后,消息不会丢失(可靠性)。二、Redis实现消息队列Redis中可以使用List或者Streams两种数据结构来满足以上消息队列的要求List有序性: list本身就是先进先出,天然支持有序性(高并发时需要多个消息队列,每个队列保存同一个服务的消息,对应消费该服务消息的消费者);幂等性: 生产者在            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-15 07:02:57
                            
                                106阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            队列:先进先出redis队列:Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列。由于Redis的列表是使用双向链表实现的,保存了头尾节点,所以在列表头尾两边插取元素都是非常快的。
所以可以直接使用redis的list实现消息队列,只需简单的两个指令lpush和rpop或者rpush和lpop。rabbitmq使用参考网址:利用Python学习RabbitMQ消息            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-26 21:41:02
                            
                                126阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、概述在处理Web客户端发送的命令请求时,某些操作的执行时间可能会比我们预期的更长一些。通过将待执行的相关信息放入队列里面,并在之后对队列进行处理,用户可以推迟执行那些需要一段时间才能完成的操作,这种将工作交给任务管理器来执行的做法称为任务队列。例如:很多网站中都会有发送邮件的这个功能,发送邮件是一个双向数据的交互过程,如果使用单线程实现,很难避免会等待很长时间的情况出现,但碍于某些框架或语言不            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-06 22:55:08
                            
                                300阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在保证了rocketMQ的消息顺序性之后,还应该进行消息去重。由于消息的重复性往往是由于网络抖动造成的,所以我们一般要在自己的业务端完成消息的去重。一个可用的方案就是使用Redis做缓存。具体方案如下:1.消费端收到消息的时候,使用Redis提供的incr,以msgID作为key(保证唯一性),value默认从1开始递增;2.当incr返回值为1的时候,设置其失效时间为2分钟,并且要注意,该消息需            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-04 14:54:13
                            
                                164阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis 数据类型 StreamRedis 常用命令,思维导图 >>>Redis Stream 是 Redis 5.0 版本新增加的数据结构。Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-09 19:07:57
                            
                                0阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            场景使用del指令删除key时,redis会直接释放对象的内存,当对象很小时这个指令速度是很快的,但是如果是一个很大的对象被del时,那么删除操作就会比较耗时,造成其他指令阻塞,对客户端造成卡顿的现象。unlinkRedis在4.0版本中引入了unlink指令,可以对删除操作进行懒处理,丢给后台线程异步回收内存。unlink youkey
复制代码注意,虽然是异步删除,但并不会引发并发问题,因为u            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-25 10:51:15
                            
                                79阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、消息队列简介消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括 3 个角色:消息队列:存储和管理消息,也被称为消息代理(Message Broker)生产者:发送消息到消息队列消费者:从消息队列获取消息并处理消息 消息队列和阻塞队列的区别: ① 消息队列是在 JVM 以外的独立服务,所以不受 JVM 内存的限制 ② 消息队列不仅仅做数据存储,还需要确保            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-09 15:51:07
                            
                                1095阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            redis是现在很火的缓存数据库,单线程的运行使得效率很高,redis的集合是一个链表式的数组,并且为了支持单线程操作,所有的数组执行都是串行操作阻塞式读取,因此,可以基于redis的数组实现一个消息队列。并且redis还支持发布订阅模式,也可以据此构建一个聊天系统在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-29 11:11:14
                            
                                52阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis分布式锁与延时队列一、Redis分布式锁首先1、原子操作是什么?原子操作是指不会被线程调度打断的操作。这种操作一旦F开始,就会一直运行到结束。中间不会有任何线程切换。2、CAP原则是什么?CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-24 22:23:18
                            
                                39阅读