-
Java操作Redis消息队列案例(应用于Socket通信)
2017-09-13 23:38:57redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合 redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合 -
java的redis队列怎么使用_如何使用Jedis操作Redis消息队列
2021-03-15 01:59:03资源链接[Jedis的jar包] 1[Commons-io的jar包] 2使用方法代码样例如下,使用前,注意打开redis的server程序。代码样例package RedisExample;import redis.clients.jedis.Jedis;public class TestRedis {public ...资源链接
[Jedis的jar包] 1
[Commons-io的jar包] 2
使用方法
代码样例如下,使用前,注意打开redis的server程序。
代码样例
package RedisExample;
import redis.clients.jedis.Jedis;
public class TestRedis {
public static void main(String[] args) {
Jedis redis = new Jedis("localhost");
//SimpleExample(redis);
//ListExample(redis,20000);
PublishExample(redis,20000);
}
//简单添加信息
public static void SimpleExample(Jedis redis){
redis.set("key1", "I am value 1");
String ss = redis.get("key1");
System.out.println(ss);
}
//队列添加信息
public static void ListExample(Jedis redis,int number){
String messageStr = "";
int count = 0;
while(count++ < number){
messageStr = "this is "+count+" message!";
redis.rpush("logstash-test-list",messageStr);
System.out.println(messageStr);
}
}
//发布订阅
public static void PublishExample(Jedis redis,int number){
String messageStr = "";
int count = 0;
while(count++ < number){
messageStr = "this is "+count+" message!";
redis.publish("logstash-test-list",messageStr);
System.out.println(messageStr);
}
}
}
-
Java操作Redis(六)--Java操作Redis实现消息队列
2020-01-31 22:12:091.消息发布者:实现消息发布的功能 package com.ruoyi.project.redis.messgaeQueue; import redis.clients.jedis.Jedis; /** * 消息发布者 * 1.建立两个Jedis客户端 * 2.建立两个发布/订阅监听器 * 3...文章目录
1.消息发布者:实现消息发布的功能
package com.ruoyi.project.redis.messgaeQueue; import redis.clients.jedis.Jedis; /** * 消息发布者 * 1.建立两个Jedis客户端 * 2.建立两个发布/订阅监听器 * 3.启动两个线程。分别用于监听频道和模式 */ public class MessagePublisher { @SuppressWarnings("resource") public static void main(String[] args) { final Jedis jedis = new Jedis("127.0.0.1", 6379); final Jedis pjedis = new Jedis("127.0.0.1", 6380); final MessageSubscriber listener = new MessageSubscriber(); final MessageSubscriber plistener = new MessageSubscriber(); Thread thread = new Thread(new Runnable() { @Override public void run() { jedis.subscribe(listener, "mychannel"); } }); Thread pthread = new Thread(new Runnable() { @Override public void run() { pjedis.psubscribe(plistener, "mychannel.*"); } }); thread.start(); pthread.start(); } }
2.消息订阅者:实现消息的订阅消费功能
package com.ruoyi.project.redis.messgaeQueue; import redis.clients.jedis.JedisPubSub; /** * 消息订阅者 * 监听器会对频道和模式的订阅,接收消息和退订等事件进行监听,然后进行相应的处理 */ public class MessageSubscriber extends JedisPubSub { //消息订阅成功的处理 public void onMessage(String channel, String message) { System.out.println("onMessage:" + channel + "=" + message); if (message.equals("quit")) { this.unsubscribe(channel); } } //订阅初始化 public void onSubscribe(String channel, int subscribedChannels) { System.out.println("onSubscribe:" + channel + "=" + subscribedChannels); } //取消订阅 public void onUnsubscribe(String channel, int subscribedChannels) { System.out.println("onUnsubscribe:" + channel + "=" + subscribedChannels); } //按模式的方式订阅 public void onPSubscribe(String pattern, int subscribedChannels) { System.out.println("onPSubscribe:" + pattern + "=" + subscribedChannels); } //取消模式方式的订阅 public void onPUnsubscribe(String pattern, int subscribedChannels) { System.out.println("onPUnsubscribe:" + pattern + "=" + subscribedChannels); } //处理消息订阅模式 public void onPMessage(String pattern, String channel, String message) { System.out.println("onPMessage:" + pattern + "=" + channel + "=" + message); if (message.equals("quit")) { this.punsubscribe(pattern); } } }
3.按照上面说明完成基础配置
3.2 在启动2个Redis服务端
完成启动Redis服务后,运行main方法,如下,项目处于消息订阅状态
D:\software\Redis>redis-server D:\software\Redis\redis.windows-6379.conf
D:\software\Redis>redis-server D:\software\Redis\redis.windows-6380.conf
3.1在启动2个Redis客户端
D:>cd D:\software\Redis
D:\software\Redis>redis-cli -p 6379
D:\software\Redis>redis-cli -p 63803.2 分别在两个客户端中执行以下命令发送消息
publish mychannel “hello redis”
publish mychannel.redis “hello redis”
-
redis队列并发 java_PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2021-03-16 22:33:11前言现在越来越多的网站开始注重统计和用户行为分析,作为网站经常使用的功能,如何让...思路:这里我们用到了redis的队列,注册的时候先添加到队列,然后在处理的时候出队,并且把人数添加redis里。代码://registe...前言
现在越来越多的网站开始注重统计和用户行为分析,作为网站经常使用的功能,如何让统计性能更加高,这也是我们需要考虑的事情。本篇通过Redis来优化统计功能(以注册人数统计为例)。
传统的统计功能都是直接操作数据库把数据插入表中。这样做,对数据库的性能消耗就会比较大。
思路:
这里我们用到了redis的队列,注册的时候先添加到队列,然后在处理的时候出队,并且把人数添加redis里。
代码:
//register.php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$i=0;
while(true){
$i++;
//假定一直有人在注册
$redis->rpush("register_success",$i);
}
//deal.php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
while (true) {
//list类型出队操作
$value = $redis->lpop('register_success');
if($value){
echo "deal value : ".$value;
//自增 添加注册人数统计 如果key不存在 则会初始化为0
$redis->incr('register_num');
}else{
echo "deal finish";
}
}
以上这篇PHP+Redis 消息队列 实现高并发下注册人数统计的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
-
Java利用Redis实现消息队列
2018-12-27 16:17:47使用jar包:jedis-2.9.0.jar、commons-pool2-2.3.jar Message 需要传送的实体... Jedis 通过消息队列的先进先出(FIFO)的特点结合Redis的list中的push和pop操作进行封装的工具类 1、消息类 public class Messag...使用jar包:jedis-2.9.0.jar、commons-pool2-2.3.jar
- Message
需要传送的实体类(需实现Serializable接口)
- ObjectUtil
将对象和byte数组双向转换的工具类
- Jedis
通过消息队列
的先进先出(FIFO)的特点结合Redis的list中的push和pop操作进行封装的工具类
1、消息类
public class Message implements Serializable{ private int id; private String content; public Message(int id,String content) { this.id = id; this.content = content; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
2、序列化
主要是将对象转化为byte数组,和根据byte数组反序列化成java对象; 主要是用到了ByteArrayOutputStream和ByteArrayInputStream; 注意:每个需要序列化的对象都要实现Serializable接口;
public class ObjectUtil { public static byte[] object2Bytes(Object obj) throws IOException{ ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(obj); byte[] bytes = bo.toByteArray(); bo.close(); oo.close(); return bytes; } public static Object bytes2Object(byte[] bytes) throws Exception { ByteArrayInputStream in = new ByteArrayInputStream(bytes); ObjectInputStream sIn = new ObjectInputStream(in); return sIn.readObject(); } }
3、利用redis做队列,采用redis中list的push和pop操作;
public class JedisUtil { private static String JEDIS_IP; private static int JEDIS_PORT; private static String JEDIS_PASSWORD; private static JedisPool jedisPool; static{ Configuration conf = Configuration.getInstance(); JEDIS_IP="127.0.0.1"; JEDIS_PORT = 6379; JEDIS_PASSWORD = "123456"; JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(256); config.setTestOnBorrow(true); config.setTestOnReturn(true); config.setTestWhileIdle(true); config.setMinEvictableIdleTimeMillis(60000L); config.setTimeBetweenEvictionRunsMillis(3000L); config.setNumTestsPerEvictionRun(-1); jedisPool=new JedisPool(config,JEDIS_IP,JEDIS_PORT,60000,JEDIS_PASSWORD); } /** * 存储REDIS队列 顺序存储 * @param key reids键名 * @param value 键值 */ public static void lpush(byte[] key, byte[] value) { Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.lpush(key, value); } catch (Exception e) { //释放redis对象 jedisPool.returnBrokenResource(jedis); e.printStackTrace(); } finally { //返还到连接池 close(jedis); } } /** * 存储REDIS队列 反向存储 * @param key reids键名 * @param value 键值 */ public static void rpush(byte[] key, byte[] value) { Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.rpush(key, value); } catch (Exception e) { //释放redis对象 jedisPool.returnBrokenResource(jedis); e.printStackTrace(); } finally { //返还到连接池 close(jedis); } } /** * 获取队列数据 * @param key 键名 * @return */ public static byte[] rpop(byte[] key) { byte[] bytes = null; Jedis jedis = null; try { jedis = jedisPool.getResource(); bytes = jedis.rpop(key); } catch (Exception e) { //释放redis对象 jedisPool.returnBrokenResource(jedis); e.printStackTrace(); } finally { //返还到连接池 close(jedis); } return bytes; } private static void close(Jedis jedis) { try{ jedisPool.returnResource(jedis); }catch (Exception e){ if(jedis.isConnected()){ jedis.quit(); jedis.disconnect(); } } } }
4、测试
用lpush和rpop对redis的队列中的元素进行存入和取出,就能满足先进先出(FIFO)的特点。存入队列中的是Message对象序列化后的字节数组,取出时,再将其反序列化为原对象。
public class TestRedisQueue { public static byte[] redisKey = "key".getBytes(); static { try { init(); } catch (IOException e) { e.printStackTrace(); } } //初始存入1000个消息到队列 private static void init() throws IOException { for (int i = 0; i < 1000; i++) { Message message = new Message(i, "这是第" + i + "个内容"); JedisUtil.lpush(redisKey, ObjectUtil.object2Bytes(message)); } } //每运行一次取出100个消息 public static void main(String[] args) { try { for(int i=0;i<100;i++){ pop(); } } catch (Exception e) { e.printStackTrace(); } } private static void pop() throws Exception { byte[] bytes = JedisUtil.rpop(redisKey); Message msg = (Message) ObjectUtil.bytes2Object(bytes); if (msg != null) { System.out.println(msg.getId() + "----" + msg.getContent()); } } }
- Message
-
Java Redis实现消息队列,异步记录日志
2020-03-04 15:37:22通过Redis实现消息队列主要用的是Redis数据类型List,Lpush,Brpop两个命令。Redis实现的消息队列肯定不如MQ的功能强大,灵活。但是实现一些不复杂的生产者-消费者模型还是可以参考的。毕竟不用单独搭建一套MQ。 ... -
java redis pom_Java操作Redis总结
2021-03-21 08:47:11本篇涉及了redis的5种基本数据类型的最基本操作:string、list、set、hash、zset,以及简单的redis消息队列的使用。pom依赖:redis.clientsjedis3.0.1废话不多说上代码:/*** 初始化redis连接池*/private static ... -
java操作redis
2020-03-21 21:12:41Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务... -
用Redis做消息队列
2018-11-12 21:29:03一、消息队列的适用场景 ...redis相关:java代码操作redis数据库 1、引入redis 依赖包。 2、java代码操作redis阻塞队列。 java代码测试如下: package com.cjh.test.redis; import redis.clients.jedi... -
Linux下操作redis 与java操作redis
2019-01-12 20:27:431. Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、... -
java redis实现fifo_用redis实现消息队列【开发记录】
2021-03-22 12:31:02为什么需要消息队列系统中引入消息队列机制是对系统一个非常大的改善。例如一个web系统中,用户做了某项操作后需要发送邮件通知到用户邮箱中。你可以使用同步方式让用户等待邮件发送完成后反馈给用户,但是这样可能... -
redis实现消息队列
2021-02-01 16:47:11java 用 redis实现消息队列&发布/订阅模式使用 Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性能的优先队列。同时在更高层面上,Redis还支持"发布/订阅"的消息模式,可以... -
java 消息队列demo_Spring-data-redis实现消息队列的demo(附源码)
2021-02-27 22:57:143.成果: 开发了生产者/消费者模式的消息队列。二、实施方案1.使用SpringMVC,Spring-data-redis框架。2.工程结构如下:三、技术原理1.spring-data-redis的使用流程2.RedisTemplate常用API1.opsForValue() 这个连... -
Java Jedis操作Redis示例(一)——pub/sub模式实现消息队列
2017-09-07 21:54:59一 消息队列 1. 定义 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,... -
springboot整合redis实现消息队列
2018-11-27 16:57:42在java中直接使用redis的时候,直接使用简单的两个指令lpush和rpop或者rpush和lpop就可以实现消息队列的操作。当与spring结合时,可以使用RedisTemplate和StringRedisTemplate;这两个Template是spring封装了对Redis... -
使用命令与java代码操作Redis
2020-10-14 11:05:15使用命令与java代码操作Redis一、Redis简介二、通过命令操作redis(命令不区分大小写)三、Java访问redis3.1 添加依赖3.2 Java连接redis3.3 Java操作redis 一、Redis简介 Redis是一个开源(BSD许可),内存存储的数据... -
Java Jedis操作Redis示例(二)——list 生产者/消费者模式实现消息队列
2017-09-08 00:12:28三、Redis消息队列的入列和出列 上述简单例子实现了队列的基本功能,但是在消息的入列和出列时采用阻塞的push和pop,却无法保证消息的安全性。 如果 消费者程序 在取出消息元素后崩溃了,由于该消息已经被取出... -
redis实现消息队列(发布/订阅模式)
2019-05-24 23:38:00redis的列表类型天生支持用作消息队列(类似于MQ的队列模型–任何时候都可以消费,一条消息只能消费一次) ...java程序实现消息队列 先生产者 本人下面的目录结构参考https://blog.csdn.net/weixin_43113679/... -
使用命令与Java代码操作Redis
2020-10-10 18:58:50RedisRedis简介通过命令操作redis(命令不区分大小写)Java访问redis Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 Redis用途: 数据库 缓存 通过... -
java——异步消息队列
2018-07-22 12:57:33什么是消息队列? 消息队列,是一个以队列数据结构为基础的一个实体,这个实体是真实存在的。比如程序中的数组,数据库中的表或者redis等等。 为什么要使用队列?什么情况下才会使用队列? 实时性要求不高,比较耗... -
thinkphp5操作redis系列教程 ---简单模拟消息队列
2019-10-29 12:01:181.入队 $arr = array('c','c++','php','java','go','python'); foreach($arr as $k=>$v){ $redis->rpush("zcz",$v); echo $k."号入队成功"."<br/>"; /* ... -
Java Spring mvc 操作 Redis 及 Redis 集群
2017-06-03 12:09:54Redis 是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务... -
Java Spring mvc 操作 Redis 及 Redis 集群Redis集群搭建与简单使用
2016-10-14 14:35:55关于 Redis 集群搭建可以参考我的另一篇文章 Redis...Redis 是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperlo