引用包:jedis-3.0.1.jar、commons-pool2-2.6.0.jar

一、从Redis集合中实时获取数据:

连接Redis

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; public static Lock lock = new ReentrantLock(); /**
* 连接Redis
* @param conferenceId
* @return
*/
public String startRedis(String topicId) {
textMessage = "";
String result = "";
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setTimeBetweenEvictionRunsMillis(30000);
config.setMaxWaitMillis(10 * 1000);
config.setMaxIdle(1000);
config.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(config, redisIpYJ, Integer.parseInt(redisPortYJ),10000);// 连接redis服务端
result = "连接Redis成功";
lock.lock();
try {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
getRecordTextNew_Redis(jedisPool,topicId);
}
});
thread.start();
} finally {
lock.unlock();
}
} catch (Exception e) {
result = "连接Redis失败:" + e.getMessage();
}
return result;
}

实时获取数据

public static Boolean isSelectRedis = false;//是否继续查询Redis

    /**
* 从Redis实时获取语音记录文本(党组会)
* @param topicId
*/
public void getRecordTextNew_Redis(JedisPool jedisPool,String topicId) {
Jedis jedis = null;
while (isSelectRedis) {
try {
jedis = jedisPool.getResource(); //取出一个连接
Set<String> results = jedis.zrange("asr:text:"+topicId,0,-1);
for (String result: results) {
//TODO消费result
if (StringUtils.isNotEmpty(result)) {
JSONObject resultMsg = JSONObject.parseObject(result);
String text = resultMsg.getString("result");
System.out.println("消息text:"+text);
String pgs = "1";
String micName = resultMsg.getString("roleName");
String micId = resultMsg.getString("role");
String uId = resultMsg.getString("uid");//段落ID
if (StringUtils.isNotEmpty(text)) {
String dataText = "<b>" + micName + ":</b>" + text;
String dataText2 = "<div id=\""+ uId +"\"><b>" + micName + ":</b>" + text+"</div>";
textMap.put(uId, dataText2);
System.out.println("消息dataText:"+dataText);
JSONObject textObj = new JSONObject();
textObj.put("dataText", dataText);
textObj.put("dataPgs", pgs);
textObj.put("dataUId", uId);
try {
Thread.sleep(400);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
ConfWebSocketService.sendMessage(textObj.toJSONString(), "2");//向页面发送消息
}
}
}
String[] strResults = (String[])(results.toArray(new String[results.size()]));
if (strResults.length > 0) {
//TODO 移除消费掉的数据
jedis.zrem("asr:text:"+topicId, strResults);
}
Thread.sleep(300);
} catch (Exception e) {
if (jedis != null) {
jedis.close();
}
e.printStackTrace();
}finally {
if (jedis != null) {
jedis.close();
}
}
}
}

二、通过Redis订阅消息:

package net.nblh.utils.common;

import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; /**
* 建立订阅者,订阅者去订阅频道(mychannel)
* @author lijd
*
*/
public class GetSpeechRecognition_YJ_Sub extends Thread{
private final JedisPool jedisPool;
private final GetSpeechRecognition_YJ_Msg msgListener = new GetSpeechRecognition_YJ_Msg();
private final String channel = "db0";//"mychannel"; public GetSpeechRecognition_YJ_Sub(JedisPool jedisPool) {
super("GetSpeechRecognition_YJ_Sub");
this.jedisPool = jedisPool;
} @Override
public void run() {
Jedis jedis = null;
try {
jedis = jedisPool.getResource(); //取出一个连接
Set<String> result = jedis.zrange("asr:text:1112",0,-1);
//jedis.subscribe(msgListener, channel); //通过subscribe的api去订阅,参数是订阅者和频道名
//注意:subscribe是一个阻塞的方法,在取消订阅该频道前,会一直阻塞在这,无法执行后续的代码
//这里在msgListener的onMessage方法里面收到消息后,调用了this.unsubscribe();来取消订阅,才会继续执行
System.out.println("继续执行后续代码。。。"); } catch (Exception e) {
if (jedis != null) {
jedis.close();
}
e.printStackTrace();
}finally {
if (jedis != null) {
jedis.close();
}
}
}
}
package net.nblh.utils.common;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; /**
* //建立发布者,通过频道(mychannel)发布消息
* @author lijd
*
*/
public class GetSpeechRecognition_YJ_Pub extends Thread{
private final JedisPool jedisPool; public GetSpeechRecognition_YJ_Pub(JedisPool jedisPool) {
this.jedisPool = jedisPool;
} @Override
public void run() {
while (true) {
Jedis jedis = null;
try {
Thread.sleep(1000);
jedis = jedisPool.getResource();//连接池中取出一个连接
String line = "fabuxiaoxi:";
if (!"quit".equals(line)) {
jedis.publish("mychannel", line);//从通过mychannel 频道发布消息
System.out.println(String.format("发布消息成功!channel: %s, message: %s", "mychannel", line));
}else {
break;
}
if (jedis != null) {
jedis.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
package net.nblh.utils.common;

import redis.clients.jedis.JedisPubSub;

/**
* 建立消息监听类,并重写了JedisPubSub的一些相关方法
* @author lijd
*
*/
public class GetSpeechRecognition_YJ_Msg extends JedisPubSub{
public GetSpeechRecognition_YJ_Msg(){} @Override
public void onMessage(String channel, String message) {
//收到消息会调用
System.out.println(String.format("收到消息成功! channel: %s, message: %s", channel, message));
//this.unsubscribe();
} @Override
public void onSubscribe(String channel, int subscribedChannels) {
//订阅频道会调用
System.out.println(String.format("订阅频道成功! channel: %s, subscribedChannels %d",
channel, subscribedChannels));
} @Override
public void onUnsubscribe(String channel, int subscribedChannels) {
//取消订阅会调用
System.out.println(String.format("取消订阅频道! channel: %s, subscribedChannels: %d",
channel, subscribedChannels));
}
}

java-Redis集合的更多相关文章

  1. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  2. Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念

    Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念 在学习redis之前我们先来学习两个概念,即什么是关系型数据库什么是非关系型数据库,二者的区别是什么,二者的关系又是什么? ** ...

  3. Java Redis系列2 (redis的安装与使用+redis持久化的实现))

    Java Redis系列2 (redis的安装与使用+redis持久化的实现) 什么是Redis? Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50 ...

  4. Java Redis系列3(Jedis的使用+jedis连接池技术)

    Jedis的使用 什么是Jedis? 一款Java操作redis数据库的工具 使用步骤 1.下载redis所需的java包 2.使用步骤 import org.junit.Test; public c ...

  5. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  6. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  7. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  8. java.util 集合框架集合

    java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...

  9. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  10. Redis 集合(Set)

      Redis的Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1). 集合中最 ...

随机推荐

  1. IdentityServer4服务器配置

    Session认证和JWT(Json Web Token) Token认证就是基于JWT 1.Session认证 1. 用户输入其登录信息 2. 服务器验证信息是否正确,并创建一个session,然后 ...

  2. POJ 3278 抓奶牛(BFS入门题)

    描述 农夫约翰已被告知逃亡牛的位置,并希望立即抓住她.他开始于一个点Ñ(0≤ Ñ ≤100,000)上的数线和牛是在点ķ(0≤ ķ上相同数目的线≤100,000).农夫约翰有两种交通方式:步行和传送. ...

  3. 字符串转换整数 (atoi)

    题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...

  4. 英语发音规则---I字母常见发音组合有哪些

    英语发音规则---I字母常见发音组合有哪些 一.总结 一句话总结: I/y在开音节中发/aɪ/,例如:bite /baɪt/ n. 咬 I/y在闭音节中发 /ɪ/,例如:clinic /'klɪnɪk ...

  5. Java集合框架源码分析(2)LinkedList

    链表(LinkedList) 数组(array)和数组列表(ArrayList)都有一个重大的缺陷: 从数组的中间位置删除一个元素要付出很大的代价,因为数组中在被删除元素之后的所有元素都要向数组的前端 ...

  6. DBMS_NETWORK_ACL_ADMIN (OCP 053 第七题)

    You create an access control list(ACL)using the DBMS_NETWORK_ACL_ADMIN package It is a list of users ...

  7. Python---遍历序列的各种方式

    本文主要列举使用for循环遍历类似list结果的方式,因为老是使用for e in w_list真的是太没创意了,这显然不是我的风格,嘿嘿... 1. for item in s: 遍历s中的元素 2 ...

  8. Android 音视频深入 十四 FFmpeg与OpenSL ES 播放mp3音乐,能暂停(附源码下载)

    项目地址https://github.com/979451341/FFmpegOpenslES 这次说的是FFmpeg解码mp3,数据给OpenSL ES播放,并且能够暂停. 1.创建引擎 slCre ...

  9. H5 audio 通过canplaythrough预加载音乐

    1.背景 微信里做H5活动页面,对音乐使用autoplay, android没问题,IOS半天播不出来,因此考虑对音乐进行预加载(不是preload) <!DOCTYPE html> &l ...

  10. apache 与 php-fpm 几种处理方式

    目录 1.SetHandler 2.ProxyPassMatch 3.ProxyPass 1.SetHandler 在apache配置文件只部署一次 需要Apache 2.4.9以上才行 ip:por ...