一 消息队列1. 定义消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。2. 消息队列的适用场景消息队列的适用场景包括异步处理,应用解耦,流量削锋和消息通讯            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-09 23:09:05
                            
                                112阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            写在前面需求是做一个秒杀系统,比如大家来抢100台手机,先到先得。查阅了网上很多用redis实现秒杀的demo(java语言),竟然没一个能用的!!!有些是php的,没闲心研究了,现在说说为什么不能用:绝大多数的DEMO都是基于redis的watch特性的事务实现①,个别是基于redis分布式锁实现②。当然还有些用了脚本的,我也没仔细看是lua还是调用redis指令,哪有那个闲心去研究哇。照顾一下            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-22 21:43:50
                            
                                52阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            需求是做一个秒杀系统,比如大家来抢100台手机,先到先得。查阅了网上很多用redis实现秒杀的demo(java语言),竟然没一个能用的!!!有些是php的,没闲心研究了,现在说说为什么不能用:绝大多数的DEMO都是基于redis的watch特性的事务实现①,个别是基于redis分布式锁实现②。当然还有些用了脚本的,我也没仔细看是lua还是调用redis指令,哪有那个闲心去研究哇。照顾一下小白,分            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-17 17:15:48
                            
                                148阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # Java实现Redis队列
## 引言
Redis是一个开源的内存数据结构存储系统,它可以用作内存数据库、缓存和消息中间件。在实际应用中,我们常常需要使用队列来处理并发请求,将任务按照一定顺序进行处理。本文将介绍如何使用Java实现基于Redis的队列,并提供代码示例。
## Redis队列简介
Redis队列是一种先进先出(FIFO)的数据结构,它可以用于实现消息队列、任务队列等场景            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-02-03 03:31:58
                            
                                250阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            通过redis锁,list 以及配合消息队列实现商品普通下单流程和秒杀的架构设计代码在这https://github.com/ItsFunny/spring-test/tree/master/spring-test-order-and-stock测试代码都在测试文件下,若无sql则在dao中更改自己的代码即可,记得修改MQ和redis更新日志:2019-03-28 更:不知道代码能不能运行,我也忘            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-02 08:02:01
                            
                                27阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            项目背景由于公司一项业务需要访问限量资源,但是此资源的数量有限不支持大规模用户同时使用,只能做一个排队功能来给用户提供服务。此功能是在springboot项目下开发,配和使用redisson 来实现。项目需求在用户访问资源时,如果有空闲资源则正常返回,如果没有空闲资源,则返回排队队列信息(队列总长度、当前处于位置)。前端需轮训(几秒一次,根据业务来定,无需太频繁)访问尝试获取资源,保持心跳请求。如            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-08 22:23:48
                            
                                305阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            先说今天分享一个之前写的基于redis和kafka实现类似银行叫号前言之前作过某风控系统,系统内会设计调用大量的三方数据,导致每一笔风控审核的时候会出现某一笔的消费延迟导致上游的消费速度显著下降,从而出现严重的卡单(kafka)。确定方案之前通过kafka消费主要是,并发消费,其类比的生活模式是早期银行排队,也就是kafka队列类似银行的多个窗口。假设银行规定,排队之后不能更换窗口,一个数据类似是            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-01 23:09:31
                            
                                111阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis是一种基于内存的数据存储系统,被广泛用于解决高并发问题。以下是 Redis 如何解决高并发的一些常见方法:缓存:Redis 提供了高速缓存功能,可以将常用的数据缓存在内存中,降低访问数据库的频率。这可以减轻数据库的负担,提高系统的响应速度和并发能力。队列:Redis 提供了多种队列数据结构,如 list 和 set,可以用来实现任务队列和消息队列等。通过使用队列,可以将请求分发到多个处理            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-25 11:08:12
                            
                                213阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis除了做缓存,还能做什么分布式锁 : 可以基于 Redisson 来实现分布式锁。限流 :可以通过 Redis + Lua 脚本的方式来实现限流。消息队列 :Redis 自带的 list 数据结构可以作为一个简单的队列使用,Redis5.0 中增加的 Stream 类型的数据结构更加适合用来做消息队列。复杂业务场景 :通过 Redis 以及 Redis 扩展提供的数据结构,可以很方便地完成            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-27 21:53:50
                            
                                152阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            业务需求业务里面需要文章的定时发布功能,因此打算采用mq和redis来实现一下定时发布的功能。mq之前用过了。基于一些私信交换机地信息过期策略实现。所以这次采用redis。并且打算将这个延迟任务的服务集成在一个微服务里面,提供对外的feign的远程调用接口,这样就可以一劳永逸一下。博客内容本次redis实现将分为多个文章来详细描述一下。并且介绍一些重要功能的实现思路和重要代码以及redis的一些特            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-01 19:58:43
                            
                                56阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            首先找到第一个切入口,redis的列表类型有两个命令LPUSH和RPOP,LPUSH命令可以让元素从左侧进入队列,RPOP命令可以让元素从右侧弹出。这样两个命令配合使用就形成了左边进,右边出的形式,间接实现了队列的功能。生产者通过LPUSH命令添加任务到某个键中,消费者通过RPOP命令不断从该键中取出任务。这时候问题来了,消费者怎么知道啥时有任务?消费者只能不断循环的读取键对应的队列,如果有任务就            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-08 15:11:51
                            
                                107阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            目录一、前置准备 二、操作string 三、操作哈希 四、操作List由左向右 由右向左五、 操作Set一、前置准备启动redis的服务 导入pom依赖 新建一个包 成功 连接的代码Jedis jedis = new Jedis("192.168.26.128",6379);     &n            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-21 22:51:30
                            
                                368阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
                继之前用rabbitMQ实现延时队列,Redis由于其自身的Zset数据结构,也同样可以实现延时的操作    Zset本质就是Set结构上加了个排序的功能,除了添加数据value之外,还提供另一属性score,这一属性在添加修改元素时候可以指定,每次指定后,Zset会自动重新按新的值调整顺序。可以理解为有两列字段的数据表,一列存v            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-11 15:03:07
                            
                                103阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1.将数据放到redis队列中public long lpush(String key, String value) {
   Jedis jedis=jedisPool.getResource();
   try{
      return jedis.lpush(key, value);
   }finally{
      jedis.close();
   }
}/**
 * 添加发送消息            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-07 16:33:23
                            
                                85阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis 队列与 StreamRedis5.0 最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的支持多播的可持久化的消息队列,作者声明 Redis Stream 地借鉴了 Kafka 的设计。 Redis Stream 的结构如上图所示,每一个Stream都有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。消息是持久化的,Redis 重启后            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-17 16:20:26
                            
                                243阅读
                            
                                                        
                                点赞
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Redis实现简单延队列, 利用zset有序的数据结构, score设置为延时的时间戳. 实现思路:1、使用命令 [zrangebyscore keyName socreMin socreMax] 会返回已score排序由小到大的一个list2、list非空则使用[zrem keyName value]  删除第一个元素, 删除成功即代表消费成功, 可以解决多线程并发消费的问题            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-25 17:24:55
                            
                                536阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            介绍所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景是商品;将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢,既要保证高效并发,也要保证操作的正确。开发环境SpringBoot+mysql+maven+JDK8+RabbitMQ+Redis测试工具Jmeter测试工具工具安装参考地址安装RabbitMQdocker与            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-02 15:57:50
                            
                                35阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在java业务开发过程中,经常可能会有这样的需求,我需要在未来的某个时间点执行一个任务,而这个任务是一次性的。又或者是需要动态的创建一个时间线,在某个时间点对应的做某一件事情。而通过定时任务来做的话,很难达到这样的功能,只能通过一个短间隔的定时任务去一直判断当前时间,从而执行某个任务。而如果是需要在未来某一时间点执行某任务的时候,如果仅仅只是使用内存来存这个未来的时间点,则会有进程重启后丢失的风险            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-19 13:29:48
                            
                                77阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            应用场景:  例如秒杀。瞬时大量写入订单到数据库,导致数据库无法及时响应。此时可以采用Redis做消息队列,把所有需要写入的数据先写入Redis消息队列中,然后同时在服务器开启php-cli进程循环读取队列中的数据,异步写入数据库。使用redis做消息队列可能会出现消息丢失的情况,因为没有消息接收的确认机制。大型程序,应该使用类似RabitMQ来做专业消息队列。  1、使用publish/subs            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-31 16:31:44
                            
                                51阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            秒杀场景一般需要需要解决的问题就是超卖和数据库压力。一般解决数据库商品超卖最直接的方法就是将字段设置为unsigned(无符号),这样库存就不会为负了。还有就是可以使用事务锁住操作的行,保证库存。当然也使用锁机制(悲观锁、乐观锁),但是这几种都是直接操作数据库的,并且用锁的话在其他场景(比如不参与抢购原价购买的用户),在高并发场景下可能会造成阻塞,直接影响数据库的性能。还有种方案就是使用文件排他锁            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-12 14:59:34
                            
                                113阅读