Java使用Redis实现消息队列

近期刷Java面试题刷到了“如何使用Redis实现消息队列”,解答如下:
一般使用 list 结构作为队列, rpush 生产消息, lpop 消费消息。当 lpop 没有消息的时候,要适当sleep 一会再重试。若不使用sleep,则可以用指令blpop(该指令在没有消息的时候,它会阻塞住直到消息到来)

目录

  • 引入Jedis
  • 指令简介
    • rpush
    • blpop
  • Java使用Redis实现消息队列

引入Jedis

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version>
</dependency>

指令简介

rpush

rpush操作是向Redis服务器中的一个列表(List)中添加一个元素。这个操作通常用于向队列中添加任务或者数据。
语法:rpush key value1 [value2] [value3] …
示例:rpush my_list “task1” “task2” “task3”

blpop

blpop操作是用于移除并获取Redis服务器列表中的第一个元素,在该元素存在时会阻塞列表直到超时或发现可弹出的元素。
语法:blpop key1 [key2 …] timeout
示例:blpop my_list 5 (移除my_list中第一个元素且最多阻塞等待5秒钟)
多个列表可以这样写 blpop mylist1 mylist2 10

Java使用Redis实现消息队列

模拟生产者

import redis.clients.jedis.Jedis;public class Producer {private Jedis jedis;private String queueName;public Producer(String queueName) {this.jedis = new Jedis("localhost", 6379);this.queueName = queueName;}public void produce(String message) {jedis.rpush(queueName, message);}
}

模拟消费者

import redis.clients.jedis.Jedis;
import java.util.List;public class Consumer {private Jedis jedis;private String queueName;public Consumer(String queueName) {this.jedis = new Jedis("localhost", 6379);this.queueName = queueName;}public String consume() {//参数1是阻塞时长,0代表不限时List<String> result = jedis.blpop(0, queueName);return result.get(1);}
}

生产者端测试

public class MainP {public static void main(String[] args) {Producer producer = new Producer("queue");Thread producerThread = new Thread(() -> {producer.produce("hello world");});producerThread.start();}
}

消费者端测试

public class MainC {public static void main(String[] args) {Consumer consumer = new Consumer("queue");Thread consumerThread = new Thread(() -> {//当没有消息的时候,此处会自动堵塞等待消息while (true){String message = consumer.consume();System.out.println("消费消息: " + message);}});consumerThread.start();}
}

测试结果:开启消费者端后,当有消息生产时自动消费
在这里插入图片描述

一般情况下消息队列是直接使用mq来实现的,这边是学习的时候感兴趣顺带看下的。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479535.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决npm淘宝镜像到期问题

1 背景 由于node安装插件是从国外服务器下载&#xff0c;如果没有“特殊手法”&#xff0c;就可能会遇到下载速度慢、或其它异常问题。 所以如果npm的服务器在中国就好了&#xff0c;于是我们乐于分享的淘宝团队干了这事。你可以用此只读的淘宝服务代替官方版本&#xff0c;且…

Vue源码系列讲解——生命周期篇【一】(综述)

1. 前言 在Vue中&#xff0c;每个Vue实例从被创建出来到最终被销毁都会经历一个过程&#xff0c;就像人一样&#xff0c;从出生到死亡。在这一过程里会发生许许多多的事&#xff0c;例如设置数据监听&#xff0c;编译模板&#xff0c;组件挂载等。在Vue中&#xff0c;把Vue实例…

国开电大计算机科学与技术网络技术与应用试题及答案,分享几个实用搜题和学习工具 #媒体#其他#知识分享

这些软件以其强大的搜索引擎和智能化的算法&#xff0c;为广大大学生提供了便捷、高效的解题方式。下面&#xff0c;让我们一起来了解几款备受大学生欢迎的搜题软件吧&#xff01; 1.三羊搜题 这个是公众号 支持文字和语音查题!!! 学习通,知到,mooc等等平台的网课题目答案都…

【HarmonyOS应用开发】云开发(十九)

HarmonyOS云开发是DevEco Studio新推出的功能&#xff0c;可以让您在一个项目工程中&#xff0c;使用一种语言完成端侧和云侧功能的开发。 基于AppGallery Connect Serverless构建的云侧能力&#xff0c;让您无需构建和管理云端资源&#xff0c;随需使用&#xff0c;大大提高构…

qt for python创建UI界面

现在很多库都有用到python,又想使用QT creater创作界面&#xff0c;来使用。 1.使用的版本 使用虚拟机安装Ubuntu22.04&#xff0c;Ubuntu使用命令行安装qt,默认安装的是QT5&#xff0c;不用来回调了&#xff0c;就用系统默认的吧&#xff0c;不然安装工具都要费不少事情。pyt…

小程序--模板语法

一、插值{{}}语法 1、内容绑定 <view>{{iptValue}}</view> 2、属性绑定 <switch checked"{{true}}" /> Page({data: {iptValue: 123} }) 二、简易双向数据绑定 model:value&#xff1a;支持双向数据绑定 注&#xff1a;仅input和textarea支持&a…

如何创建WordPress付款表单(简单方法)

您是否正在寻找一种简单的方法来创建付款功能WordPress表单&#xff1f; 小企业主通常需要创建一种简单的方法来在其网站上接受付款&#xff0c;而无需设置复杂的购物车。简单的付款表格使您可以轻松接受自定义付款金额、设置定期付款并收集自定义详细信息。 在本文中&#x…

【小呆的力学笔记】弹塑性力学的初步认知四:简单应力状态下的应力应变关系

文章目录 2. 简单应力状态下的应力应变关系2.1 简单拉伸的应力应变关系2.2 真实应力应变关系2.3 应力-应变关系简化模型 2. 简单应力状态下的应力应变关系 我们在高中就学过&#xff0c;弹簧拉伸力和变形量成比例&#xff0c;对于一般的金属材料&#xff0c;在一定载荷以内这种…

银河麒麟系列产品全新介绍——麒麟天御安全域管平台

麒麟天御安全域管平台是麒麟软件自主研发的新一代终端系统域管理平台,是专门针对银河麒麟操作系统环境下大规模的域用户和终端管理需求而设计。该平台聚焦用户身份验证、权限、访问控制、集中化管理、单点登录、策略等多个领域,提供组织管理、用户管理、终端管理、任务管理、软…

D70XX——用于检测 CPU 系统或其它逻辑系 统中的通电和瞬时断电时的电压 后,准确地重置系统。,耗电小

D70XX 电压检测及复位监控电路 D70XX电路的主要功能是在系统上电和掉电瞬间能精确检测并 复位CPU系统和其它逻辑系统。 D70XX采用TO-92、SOT-89-3L及SOT-23-3L的封装形式。 主要特点&#xff1a; ● 耗电小&#xff1a; ICCL300A&#xff08;典型&#xff09; ICCH30A &…

基于shp数据制作3DTiles建筑白膜

经纬管网建模系统MagicPipe3D&#xff0c;本地离线参数化构建地下管网、建筑三维模型&#xff0c;输出标准3DTiles服务、Obj模型等格式&#xff0c;支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析。欢迎下载试用&#xff1a;http://www.magic3d.…

【Git】:Git的基本操作

Git的基本操作 一.修改文件二.版本回退三.撤销修改四.删除文件 一.修改文件 git管理的并不是文件而是修改&#xff0c;objects里的对象存储的其实是修改的内容。 接下来对ReadMe文件进行修改 1.git status查看状态 该命令用来查看从上次提交后到现在是否有对内容进行修改。它告…