一、介绍列表类型可以存储一个有序的字符串列表,常用的操作是向列表的两端添加元素,或者获取列表的一个片段;与散列类型最多能容纳的字段数量相同,一个列表类型键最多能容纳2^32-1个元素。二、优缺点优点:列表类型的内部是使用(double linked list)双向链表实现的,所以像列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素越快。(意味着即使列表中的数据量再大,获取前十条数据也是非            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-03 22:26:03
                            
                                102阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            RabbitMQ RabbiMQ是AMQP(高级消息队列协议)的消息中间件的一种,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。Redis队列 redis队列是一个是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Valu            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-13 15:50:33
                            
                                132阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            应用场景:  例如秒杀。瞬时大量写入订单到数据库,导致数据库无法及时响应。此时可以采用Redis做消息队列,把所有需要写入的数据先写入Redis消息队列中,然后同时在服务器开启php-cli进程循环读取队列中的数据,异步写入数据库。使用redis做消息队列可能会出现消息丢失的情况,因为没有消息接收的确认机制。大型程序,应该使用类似RabitMQ来做专业消息队列。  1、使用publish/subs            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-31 16:31:44
                            
                                51阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            目前在redis想要实现消息队列的功能有如下的两种方案:1:基于List的lpush和rpop
2:Streams这里不将pub/sub考虑在内,因为其不具备持久化的能力,消息会丢失。其中1是利用其有的先进先出特性实现,2是redis为了实现消息队列专门在redis5版本中定义的一种新的数据结构,这里注意,其也是一种数据结构,和String,Set等处于同等位置的数据结构,只不过内部增加了一些针对            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 08:32:03
                            
                                75阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            场景使用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阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            所谓延时队列就是延时的消息队列,下面说一下一些业务场景实践场景订单支付失败,每隔一段时间提醒用户用户并发量的情况,可以延时2分钟给用户发短信先来看看Redis实现普通的消息队列我们知道,对于专业的消息队列中间件,如Kafka和RabbitMQ,消费者在消费消息之前要进行一系列的繁琐过程。如RabbitMQ发消息之前要创建 Exchange,再创建 Queue,还要将 Queue 和 Exchang            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 08:34:10
                            
                                118阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            消息队列用途:解耦,异步,消峰。 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阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            现在用的消息队列主要有kafka,rabbitmq和redis。相比另外两个,用redis做消息队列的优点是吞吐量高,延迟低,简单易用,易于部署和运维。缺点是没有ACK机制,可靠性方面不足。  本次用swoole + redis 来模拟个消息推送系统。思路1. 某个业务调用消息接口,将内容和对应的uid存入redis列表中,key为msg。 2. 用户连接swoole后,会有个fd来标识这个会话,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-01 14:33:16
                            
                                138阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            (一)任务对立的好处 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阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、消息队列的三个要求消息有序执行(有序性);由于网络阻塞等原因,消息不会被重复执行(幂等性);宕机后,消息不会丢失(可靠性)。二、Redis实现消息队列Redis中可以使用List或者Streams两种数据结构来满足以上消息队列的要求List有序性: list本身就是先进先出,天然支持有序性(高并发时需要多个消息队列,每个队列保存同一个服务的消息,对应消费该服务消息的消费者);幂等性: 生产者在            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-15 07:02:57
                            
                                106阅读
                            
                                                                             
                 
                
                                
                    