java消费轮询redis队列_Redis实现消息队列之生产消费模式

简单的介绍下消息队列,使用消息队列首先我们得有一个队列,那么这个队列之前讲过就是先进先出的一个数据结构;那么有了队列以后我们还需要有人在队列里面放东西,那么这个放东西的人我们称之为生产者;有了生产者对应的需要一个消费者,没有消费者这个队列满了就会溢出。

简单队列实现

38eb73ee9b116e48cfd009366d94a744.png

那么我们Redis刚好有一个数据类型符合这个就是List。list可以实现队列(先进先出)和栈(先进后出),那么这个list又有两种插入数据的方式:头插法和尾插法。所以我们今天使用的结构是队列,使用尾插法,关键的命令有rpush(尾插)和lpop(头部获取)。如下图所示:

b20c119e10f421f4aac380c9d8b58667.png

> rpush squeue zhangsan lisi mango    #插入队列(integer) 3> lpop squeue    #获取队列"zhangsan"> rpush squeue wangwu(integer) 3> lpop squeue"lisi"> lpop squeue"mango"> lpop squeue"wangwu"> lpop squeue    #空队列(nil)

上面是rpush/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现延迟消息队列可以使用 Redis 的 sorted set 数据结构,其中 score 表示消息的执行时间戳,member 表示消息内容。每隔一段时间轮询一次 sorted set,将 score 小于当前时间的消息取出来执行即可。 下面是一个基于 Spring Boot 和 Redis 的简单实现代码: 首先引入 Redis 相关依赖,在 pom.xml 文件中添加以下内容: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 然后创建一个消息实体类 DelayMessage,用于存储消息内容和执行时间戳: ```java public class DelayMessage { private String message; private long executeTime; // getter 和 setter 方法省略 } ``` 接着创建一个 Redis 延迟消息队列的服务 DelayQueueService,其中包含添加消息和轮询消息的方法: ```java @Service public class DelayQueueService { private static final String DELAY_QUEUE_KEY = "delay_queue"; @Autowired private RedisTemplate<String, Object> redisTemplate; // 添加延迟消息 public void addDelayMessage(DelayMessage message) { redisTemplate.opsForZSet().add(DELAY_QUEUE_KEY, message, message.getExecuteTime()); } // 轮询延迟消息 public List<DelayMessage> pollDelayMessage() { long currentTime = System.currentTimeMillis(); Set<Object> messages = redisTemplate.opsForZSet().rangeByScore(DELAY_QUEUE_KEY, 0, currentTime); if (messages != null && !messages.isEmpty()) { List<DelayMessage> result = new ArrayList<>(); for (Object message : messages) { redisTemplate.opsForZSet().remove(DELAY_QUEUE_KEY, message); result.add((DelayMessage) message); } return result; } return null; } } ``` 最后在需要使用延迟消息队列的地方调用 addDelayMessage 方法添加消息,轮询消息可以单独开一个线程或者使用定时任务实现。 注意:以上代码只是一个简单的示例,实际使用中需要考虑分布式环境下的并发问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值